文本表示方法

在NLP诸多问题(如:文本分类等)中,文本表示不可或缺。这里博主枚举一些主流的文本表示方法。

这里主要说的是基于文本内容的表示,顺带先扯扯基于行为的表示:不同的业务有不同的表示,基于行为的文本表示如SVD,LFM等,基于用户的行为日志(如新闻点击)学习用户和文本的的特征向量,url2vec利用用户对文本的点击序列,借鉴word2vec(每个文本看成一个word),训练文本的向量表示

基于文本内容的表示(基本上都要先对文本分词处理,此处略去不表):

1、传统的非NN方法:

(1)one hot encoding

入门级文本表示方法,应用词袋模型(BOW)+ TF-IDF技术,优点是简单粗暴配合LR效果也不赖,缺点也明显,维度太高且有词义鸿沟问题,不适合大语料。

(2)主题模型系列

1)LSA/LSI等,将文档为行,词为列,表示成“文档-词”大矩阵,利用SVD矩阵分解的实现技术,训练得到词和文档的特征向量,有点儿像推荐里的隐语义模型了,模型忽略了语序,更注重主题相关,适合长文本,实际使用效果还不错。

2)LDA,比较适合长文本表示,不太适合短文本表示。LDA属于一种文档主题生成模型,引用其他博客的话:“LDA认为一篇文档的每个词都是通过“以一定概率选择了某个主题,并从这个主题中以一定概率选择某个词语”这样一个过程得到的,文档到主题服从多项式分布,主题到词语服从多项式分布”。

2、NN方法word-embedding)

(1)word2vec + TF-IDF加权平均

虽然word2vec非DNN系列,但其训练词向量效率和效果均表现不俗。首先通过word2vec训练词向量,再通过简单的词加权/关键tag加权/tf-idf加权平均得到文档向量表示。在加权之前做停用词剔除、词聚类等预处理是个不错的选择。(PS:该方法对短文本效果还可以,长文本就不咋地了kaggle101中的一个word2vec题目的tutorial里作者如是说:他试了一下简单加权和各种加权,不管如何处理,效果还不如01,归其原因作者认为加权的方式丢失了最重要的句子结构信息和词相关信息(也可以说是词序信息),而doc2vec的方法则保存了这种信息。)

(2)doc2vec

提到word2vec就不得的不提doc2vec,二者亲兄弟,doc2vec在word2vec基础上增加了个段落向量,能直接训练处(段落)文档向量,在实际使用中,貌似效果一般,特别是长文本NLP相关任务。(PS:gensim有现成的API)。参考:2014 ICML《Distributed Representations of Sentences and Documents

(3)WMD

ICML2015的论文《From Word Embeddings To Document Distances, Kusner, Washington University》新提出一种计算doc相似度的方式,大致思路是将词之间的

余弦距离作为ground distance,词频作为权重,在权重的约束条件下,求WMD的线性规划最优解。

(4)glove

最近学术界兴起了glove的方法,核心思想就是挖掘词语共现信息的内在含义,融合基于全局统计的方法(如LSI/LSA等)和基于局部预测方法(如word2vec等)于一体,貌似效果不错,在词聚类任务上的效果超越了word2vec。PS:《GloVe: Global Vectors forWord Representation

你可能感兴趣的:(NLP)