Corpora and Vector Spaces语料库和向量空间-翻译自https://radimrehurek.com/gensim/tut1.html

本教程在Jupyter Notebook上可获取

或者在notebook在线运行(不需要安装),通过binder project:

不要忘了设置

如果你想看到logging的输出

从字符串到向量

这一次,从把文档表示成字符串开始:

这是一个小的语料库,只有9个文本,每个里面只包含一个句子。

首先, 让我们把文档token化, 删除常见的单词 (使用停用词表) 以及只出现在语料库中一次的单词:

您处理文件的方式可能会有所不同;在这里, 我只是用空格分词, 然后是小写每个单词。事实上, 我使用这个特殊的 (简单和低效) 设置来模拟 Deerwester 等人的原始 LSA 文章 [1] 中所做的实验。

处理文档的方法千差万别, 依据应用场景和语言的不同而不同, 因此我决定不通过任何接口来约束它们。相反, 文档由从中提取的特征表示, 而不是由其 "表面" 字符串形式表示: 如何得到特征取决于您。下面我描述了一种常见的通用方法 (称为词袋模型), 但请记住, 不同的应用程序领域需要不同的特征, 而且, 像往常一样, 它的输入垃圾, 输出垃圾..。

要将文档转换为向量, 我们将使用称为 "词袋模型" 的文档表示形式。在此表示形式中, 每个文档由一个向量表示, 其中每个向量元素表示一个问答对, 其样式为:

"单词系统(system)在文档中出现多少次?一次。”

仅由问题 (整数) id 表示问题是有益处的。问题和 id 之间的映射称为字典。


要将标记文档实际转换为向量, 请执行以下操作:

在这里, 我们为语料库中出现的所有单词每个单词分配了一个唯一的整数 id, 其中包含 gensim.corpora.dictionary.Dictionary 类。这个类包含了文本, 收集字数和相关统计数据。最后, 我们看到在处理的语料库中有十二个不同的单词, 这意味着每个文档将由12个数字 (即, 由一个12维的 向量表示)。要查看单词和它们的 id 之间的映射, 请执行以下操作:

函数 doc2bow () 计算每个不同单词的出现次数, 将单词转换为其整数单词 id, 并将结果返回为稀疏向量。稀疏向量 [(0, 1), (1, 1)],读: 在文本 "人的计算机互作用"中, 词计算机 (id 0) 和人 (id 1) 出现一次;其他十个字典单词出现 (隐含的) 零次。

到现在应该很清楚, id=10的矢量功能代表的问题是 "单词graph 在文档中出现多少次?", 前六个文档的答案是 "零", 其余三份文档的答案是 "零"。事实上, 我们已经得出了与快速示例中完全相同的向量体。

语料库流媒体–一次一个文档

请注意, 上面的语料库完全驻留在内存中, 作为一个普通的 Python 列表。在这个简单的例子中, 这并不重要, 但仅仅为了把事情说清楚, 让我们假设语料库中有数百万个文档。将它们都存储在 RAM 中是不行的。相反, 假设文档存储在磁盘上的文件中, 每行一个文档。Gensim 只要求语料库必须能够一次返回一个文档向量:

在此处下载 示例 mycorpus.txt  文件样本。假定每个文档在每个文件中占用一行并不重要;您可以模块化 _ iter _ 函数, 以适应您的输入格式, 无论它是什么。遍历文件目录, 解析 XML, 访问网络..。只需分析您的输入, 以检索每个文档中的token列表, 然后通过字典将token转换为其 id, 并在 _ iter _ _ 中生成生成的稀疏向量。

语料库现在是一个对象。我们没有定义任何打印方式, 因此只打印内存中对象的输出地址。不是很有用。若要查看组成向量, 让我们遍历语料库并打印每个文档向量 (一次打印一个):

尽管输出与普通 Python 列表相同, 但语料库现在更内存友好, 因为最多一次只有一个向量驻留在 RAM 中。您的语料库现在可以尽可能大。

类似地, 要在不将所有文本加载到内存中的情况下构造字典, 请执行以下建议:

而这就是它的全部!至少就词袋模型表达的问题而言。当然, 我们如何处理这样的语料库是另一个问题;还不清楚计算不同词的频率有何用处。事实证明, 事实并非如此, 我们需要首先对这个简单的表示应用转换, 然后才能使用它来计算任何有意义的文档与文档相似性。下一教程将介绍转换, 但在此之前, 让我们简单地将注意力转向语料库持久性。

语料库格式

有几种文件格式用于将向量空间语料库 (~ 向量序列) 序列化到磁盘。Gensim 通过前面提到的流媒体语料库接口实现它们: 文档以懒散的方式从磁盘 (存储到) 磁盘中读取, 一次一个文档, 而不会同时将整个语料库读入主内存。

更引人注目的文件格式之一是市场矩阵格式。要以矩阵市场格式保存语料库, 请执行以下操作:

其他的格式包含Joachim’s SVMlight formatBlei’s LDA-C format and GibbsLDA++ format.

相反, 要从矩阵市场文件加载语料库迭代器:

语料库对象是流, 因此通常无法直接打印它们:

实际上, 要查看语料库的内容:

or

第二种方法显然更内存友好, 但出于测试和开发目的, 没有什么比调用列表 (语料库) 的简单性更简单的了。

要以 Blei 的 LDA-C 格式保存相同的矩阵市场文档流,

通过这种方式, gensim 还可以用作内存高效的 i/o 格式转换工具: 只需使用一种格式加载文档流, 并立即将其保存为另一种格式即可。添加新格式很容易, 请查看 SVMlight 语料库的代码以了解示例。

与 NumPy 和SciPy的兼容性

Gensim 还包含有效的实用程序函数, 以帮助从在numpy矩阵中来回转换

和from/to scipy的稀疏的矩阵

要获得完整的参考 (要将字典修剪到较小的大小?优化语料库和 Numpy/scy 阵列之间的转换?), 请参阅 API 文档。或者继续下一个关于主题和转换的教程

[1]This is the same corpus as used in Deerwester et al. (1990): Indexing by Latent Semantic Analysis, Table 2.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容