一,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/jiebahttp://www.huaxiaozhuan.com/自然语言处理/chapters/word_representation.html