在進行中文文本分析的時候,怎麼將一句話分詞之後的的詞語分別用數值向量表示啊?或者說可以用什麼模型來訓練這些文本數據得到它們的數值向量?

舉個例子:一句話為「這家餐廳的服務很好,菜也很好喫」

分詞之後為:這 家 餐廳 的 服務 很 好 菜 也 很 好喫

數值向量化:

服務可以表示為向量〔2,noun,central,frequency,sentiment,...〕向量中的數值分別表示:詞的位置,詞性,情感極性,頻次,具體情感值.....

請問這個怎麼實現啊?

ps:因為想要做惡意評論的識別,所以要基於文本構建特徵來訓練模型。

求大佬們解答,謝謝


你的這個問題跟fasttext、word2vec沒有關係。你的這個做法是上古的手工特徵流。手動抽取一個詞的一些特徵來做情感分類。

按理來說很簡單的,分詞和詞性用jieba一步到位,然後統計一下詞頻率和對應的位置就完事了。


就你要的這東西,直接用jieba分詞再按空格重新連接,然後送給sklearn裏的TfidfTransformer或者CountVectorizer就行了(看你是要直接用詞頻還是TF-IDF),抽出來的詞具體怎麼做情感分類這是另一個問題。

現在深度學習的方法一般不會這樣手工地抽取特徵,都是直接對一句話標註情感(正面或者負面),訓練的時候直接分詞再找對應的Word Embedding,然後整句整句地送進模型裏,一般比較常用的是RNN家族(比如LSTM),用CNN的也有,然後訓練的時候你可以直接用現成的詞向量(比如GloVe或者去年騰訊雲放出來的那個)

網上隨便找了個代碼,模型用Keras實現的話差不多是這樣的:

model = Sequential() # or Graph or whatever
model.add(Embedding(output_dim=vocab_dim,
input_dim=n_symbols,
mask_zero=True,
weights=[embedding_weights],
input_length=input_length)) # Adding Input Length
model.add(LSTM(output_dim=50, activation=tanh))
model.add(Dropout(0.5))
model.add(Dense(3, activation=softmax)) # Dense=&>全連接層,輸出維度=3
#要分成幾類就輸出幾維
model.add(Activation(softmax))

https://github.com/Edward1Chou/SentimentAnalysis/blob/master/lstm/lstm_train.py


你這個五元組,前四個元素使用統計方法就好,一些切詞包都可以支持。情感極性基於語料庫做統計也可以,走監督式學習也可以。


如果不用深度模型的話,可以用nltk或者sklearn文本處理工具包,裡面有文本向量化,比如用TFidf,詞頻等。其實現在很少人用這些了。用詞向量或者bert,然後使用神經網路,不需要手工特徵,效果都會好很多。當然,除非你要是設計的特徵特別好。


如果要簡單快速的,tfidf,詞頻之類的特徵,加一個SVM或者別的什麼模型就可以看看效果。

深度學習的話,詞向量並不只是具有文本相似度的信息,詞向量最主要的性質還是可以進行語義計算,比如那個被舉爛了的例子,king-man+woman=queen


kaggle裏有類似的判斷惡意評論項目,有一個數據探索的kernel

Jigsaw EDA | Kaggle?

www.kaggle.com

是英文的評論,供參考。


  1. 手工特徵,就像你說的,搞一些詞的統計量當特徵用(最簡單的比如one hot,tf idf)。
  2. learning,根據詞的上下文來學習出詞的特徵,就是我們常說的Embedding (比較簡單例子就是Word Embedding)
  3. pooling,得到一種或多種embedding之後,可以有各種奇怪的組合(加起來,接起來,或者異或)得到詞或句子的Embedding
  4. 學習的Embedding可以用深度模型做,各種RNN,CNN都可以上,所以之前幾年有好多各種奇奇怪怪的embedding
  5. 無監督預訓練深度遷移模型(BERT之類的),他們的輸入也是token (或者說是用其它簡單方法得到的token對應的embedding),輸出也可以理解為token的表示(即embedding)

小菜鳥口胡,不對的話還請大佬們指教。

圖片來自UCL的nlp課件:)


除了fasttext還有其它的模型嗎?fasttext跟word2vec的形式是差不多的,都是將詞之間的相似度作為詞向量的,這個跟我問題中說的不太一樣吧


讀一讀fasttext的paper吧

如果你做深度模型的話


推薦閱讀:
相關文章