算法:
依據(jù)詞的共有特征
成詞的標(biāo)準(zhǔn)之一:內(nèi)部凝固程度
? ? 什么是凝固程度?比如說一個詞“電影院”,如果“電影”和“院”真的是各自獨(dú)立地在文本隨機(jī)出現(xiàn),那么他兩正好出現(xiàn)在一起的概率會很小。 我們通過計(jì)算P(電影)×P(院)遠(yuǎn)小于P(電影院)發(fā)現(xiàn)“電影院”很有可能是一個有意義的詞。
? ? 因此我們枚舉文本片段的組合方式
? ? 然后取凝聚程度的最小值
成詞的標(biāo)準(zhǔn)之二:自由運(yùn)用程度
? ?什么是自由運(yùn)用程度?比如說一個詞“輩子”, 用法非常固定,除了“一輩子”、“這輩子”、“上輩子”、“下輩子”,基 本上“輩子”前面不能加別的字了。以至于直覺上會覺得“輩子”不能單獨(dú)成詞。因此我們說能夠自由運(yùn)用是一個詞的關(guān)鍵。得具有豐富的左鄰詞集合與右鄰詞集合。
????先介紹信息熵的概念,信息熵能夠反映一個事件的結(jié)果平均會給你帶來多大的信息量。如果某個結(jié)果的發(fā)生概率為p,當(dāng)你知道它確實(shí)發(fā)生了,那么你得到的信息量為-log(p)。 如果一顆骰子的六面是1,1,1,2,2,3。那么我們投到1時,得到的信息量是-log(1/2);投到2時,得到的信息量是-log(1/3);投到3時得到的信息量是-log(1/6)。
事情越不確定,信息熵越大。
? ? 我們使用信息熵來衡量一個文本片段的左鄰字集合與右鄰字集合有多隨機(jī)。
凝固程度與自由程度缺一不可,只看凝固程度的話容易找到半個詞,只看自由度的話容易得到無意義的垃圾詞組。
? ??
流程:
1. 輸入: 按行分割的未切詞文本
2. 文檔清洗, 去除非中文字符
3. 構(gòu)建子串-頻率字典, 計(jì)算長度從1到max_word_length的所有子串的頻率
4. 構(gòu)建新詞候選集, 計(jì)算所有子串-頻率字典中的子串的PMI值,PMI大魚min_pmi的所有子串構(gòu)成新詞候選集
5. 生成合法新詞, 計(jì)算新詞候選集中的所有子串左右鄰居信息熵,信息熵高于min_entropy的所有子串構(gòu)成最終的新詞集
6. 輸出:新詞集