1. 程式人生 > >【NLP】基礎:

【NLP】基礎:

一,NLP中一些基本概念
1,關鍵詞抽取:就是從文本里面把跟這篇文件意義最相關的一些詞抽取出來。這個可以追溯到文獻檢索初期,當時還不支援全文搜尋的時候,關鍵詞就可以作為搜尋這篇論文的詞語。因此,目前依然可以在論文中看到關鍵詞這一項。
在jieba.analyse包裡面有處理關鍵詞抽取的函式,包括基於 TF-IDF 演算法 以及 基於 TextRank 演算法的。
2,切詞
切詞即將一個句子或一段文字中的詞語、片語切割開。對於非拉丁文的中文來說字詞切割是一個較大的挑戰,目前著名的nlp的庫對中文切詞都不友好,如NLTK。
python 的jieba庫在切詞方面的表現比較好的。
jieba支援三種分詞模式:
精確模式,試圖將句子最精確地切開,適合文字分析;
全模式,把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義;
搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞。 支援繁體分詞。
還有適合於搜尋引擎構建倒排索引的分詞的庫:jieba.cut_for_search。
以及使用自己建立的分類器,jieba.Tokenizer(dictionary=DEFAULT_DICT)
3,詞性標註


標註句子分詞後每個詞的詞性,主語,謂語等。

二,詞向量的表達
1,最初的詞的表示是使用"one-hot"編碼來的,對於一個單詞使用陣列將其在字典中所在的位置處標1,其他標0,這樣來表示一個字典中的詞:
wordi = {0,0…1…0}
這樣會造成很大的稀疏性,而且兩個單詞直接的距離永遠是根號2。
2,然後是詞袋模型:bag of word ,詞在文件中不考慮順序,忽略其詞序和語法,句法,將其僅僅看做是一個詞集合,或者說是詞的一個組合,文字中每個詞的出現都是獨立的,不依賴於其他詞 是否出現,或者說當這篇文章的作者在任意一個位置選擇一個詞彙都不受前面句子的影響而獨立選擇的。
比如例如一共有兩個文件,且文件如下:

 1:Bob likes to play basketball, Jim likes too.

 2:Bob also likes to play football games.

基於這兩個文字文件,構造一個詞典:

Dictionary = {1:”Bob”, 2. “like”, 3. “to”, 4. “play”, 5. “basketball”, 6. “also”, 7. “football”, 8. “games”, 9. “Jim”, 10. “too”}。
這個詞典一共包含10個不同的單詞,利用詞典的索引號,上面兩個文件每一個都可以用一個10維向量表示(用整數數字0~n(n為正整數)表示某個單詞在文件中出現的次數):

1:[1, 2, 1, 1, 1, 0, 0, 0, 1, 1]
2:[1, 1, 1, 1 ,0, 1, 1, 1, 0, 0]

向量中每個元素表示詞典中相關元素在文件中出現的次數(下文中,將用單詞的直方圖表示)。不過,在構造文件向量的過程中可以看到,我們並沒有表達單詞在原來句子中出現的次序。
3, 向量空間模型 VSM

二,

參考連結:
https://github.com/fxsjy/jieba
http://www.huaxiaozhuan.com/自然語言處理/chapters/word_representation.html
https://blog.csdn.net/tiandijun/article/details/51143765
https://blog.csdn.net/sinat_26917383/article/details/71436563