Nvtext Jaccard#

group Jaccard 指数

函数

std::unique_ptr<cudf::column> jaccard_index(cudf::strings_column_view const &input1, cudf::strings_column_view const &input2, cudf::size_type width, rmm::cuda_stream_view stream = cudf::get_default_stream(), rmm::device_async_resource_ref mr = cudf::get_current_device_resource_ref())#

计算两个字符串列中各行之间的 Jaccard 相似度。

相似度是根据对应行中的字符串计算的,例如 output[row] = J(input1[row],input2[row])

Jaccard 指数公式为 https://en.wikipedia.org/wiki/Jaccard_index

J = |A ∩ B| / |A ∪ B|
where |A ∩ B| is number of common values between A and B
and |x| is the number of unique values in x.

这里的计算通过将每个字符串视为文本(即句子、段落、文章),而不是要直接比较的单个单词或标记来比较字符串列。该算法对每个字符串应用一个滑动窗口(大小由 width 参数指定),以形成要比较的两列输入中各行内的标记集。

这些子字符串本质上是字符 n-gram,用于计算该行的并集和交集。为了提高效率,子字符串使用默认的 MurmurHash32 进行哈希处理,以识别各行内的唯一性。一旦确定了该行的并集和交集大小,就会使用上述公式计算 Jaccard 指数并返回 float32 值。

input1 = ["the fuzzy dog", "little piggy", "funny bunny", "chatty parrot"]
input2 = ["the fuzzy cat", "bitty piggy", "funny bunny", "silent partner"]
r = jaccard_index(input1, input2)
r is now [0.5, 0.15384616, 1.0, 0]

如果任一输入列的行为空,则该行的输出也将为空。

抛出:

std::invalid_argument – 如果 width < 2input1.size() != input2.size()

参数:
  • input1 – 用于与 input2 比较的字符串列

  • input2 – 用于与 input1 比较的字符串列

  • width – 用于应用子字符串的字符宽度

  • stream – 用于设备内存操作和内核启动的 CUDA 流

  • mr – 用于分配返回列的设备内存的设备内存资源

返回:

指数计算值