API

为了实现下面的目标,我们开发了 text2vec

  • 简洁 - 暴露尽可能少的函数
  • 统一 - 暴露统一的接口,不需要为了每一个任务而探索新的接口
  • 灵活 - 允许很容易地解决复杂的任务
  • 快速 - 最高效地利用每一个进程的,透明地在多核机器上扩容到多进程。
  • 内存高效 - 使用流和迭代器,尽可能减少内存中的数据。

从概念上,我们可以把 API 分成以下几个部分:

向量化

参见 向量化.

create_* 系列函数, vocab_vectorizer() and hash_vectorizer() 被用来生成词汇表,Document-Term matrices,Term co-occurence matrices。这些函数负责将文本转换为数字的形式。

  • create_vocabulary();
  • create_dtm();
  • create_tcm();
  • vocab_vectorizer(), hash_vectorizer().

I/O 处理

所有 create_* 函数支持 tokens 的迭代器作为输入。例子如下:

  • itoken() 用来生成 tokens 的迭代器
  • ifiles() 用来生成文件迭代器。注意, text2vec 不处理文件输入输出,用户需要提供自定义的读取函数,比如 data.table::fread() 或者 readr 包。

如果用户需要自定义文件来源,比如从数据库导入数据,用户可以自定义自己的迭代器函数

模型

text2vec 提供统一的模型接口,与 scikit-learn 类似。text2vec 模型是可转换的,

所有 text2vec 模型都是可变的,这意味着 fit()fit_transform() 方法将会根据指定参数修改模型。

重要的动词

所有的模型都有统一的借口,这里有一些重要的动词用来进行模型的处理:

  • model$new(...) - 生成一个模型对象,设置初始化参数。这些参数是模型相关的,比如 LDA 模型需要设置主题数 k,alpha 和 eta 先验。
  • model$fit(x, ...) - 拟合模型
  • model$fit_transform(x, ...) - 拟合模型并转换数据
  • model$transform(x_new, ...) - 使用已经训练好的模型转换数据。

距离

参见 Distances .

text2vec 包提供了两套函数用来评价多种距离和相似性。所有函数都十分关注计算性能和内存的效率:

  1. sim2(x, y, method) - 计算两个矩阵,x和y,每一行的使用指定方法的相似性
  2. psim2(x, y, method) - 计算两个矩阵,x和y,每一行的并行相似性。
  3. dist2(x, y, method) - 计算两个矩阵,x和y,每一行的使用指定方法的距离
  4. dist2(x, y, method) - 计算两个矩阵,x和y,每一行的使用指定方法的并行距离

下面的方法已经实现了:

  1. Jaccard 距离
  2. 余弦距离
  3. 欧式距离
  4. Relaxed Word Mover’s Distance
text2vecDmitry Selivanov 和其他开发者一起开发。 © 2016.
如果您发现了 bugs 等问题,请到GitHub 报告。