python读取doc文件 语义识别_python – Doc2Vec:区分句子和文档

我正在玩gensim的Doc2Vec,分析stackexchange转储以分析问题的语义相似性以识别重复.Doc2Vec-Tutorial上的教程似乎将输入描述为带标记的句子.但原始论文:Doc2Vec-Paper声称该方法可用于推断段落/文档的固定长度向量.在这种情况下,有人可以解释句子和文档之间的区别,以及如何推断段落向量.由于问题有时可以跨越多个句子,我想,在训练期间,我会给同一个问题产生相...
摘要由CSDN通过智能技术生成

我正在玩gensim的Doc2Vec,分析stackexchange转储以分析问题的语义相似性以识别重复.

Doc2Vec-Tutorial上的教程似乎将输入描述为带标记的句子.

但原始论文:Doc2Vec-Paper声称该方法可用于推断段落/文档的固定长度向量.

在这种情况下,有人可以解释句子和文档之间的区别,以及如何推断段落向量.

由于问题有时可以跨越多个句子,

我想,在训练期间,我会给同一个问题产生相同标签的句子,但那么我怎么能在看不见的问题上推断这个呢?

似乎是在TRAIN和TEST文档上训练向量,有人可以解释这背后的基本原理,我应该这样做吗?

最佳答案 Gensim的Doc2Vec希望您提供与示例TaggedDocument类相同的对象形状的文本示例:同时具有单词和tags属性.

单词是文本的字符串标记的有序序列 – 它们可能是单个句子值,或段落,或长文档,这取决于您.

标签是要从文本中学习的标签列表 – 例如plain int或string-tokens,它们以某种方式用于命名相应的文本.在原始的“Paragraph Vectors”论文中,它们只是每个文本的唯一ID – 例如整数从0开始单调递增.(因此第一个TaggedDocument可能只有[0],下一个[1]等标签)

该算法只适用于文本块,而不知道句子/段落/文档等可能是什么. (为了Doc2Vec的目的,只考虑它们所有的’文档’,你从你的语料库中决定什么是正确的’文档’.)标记化甚至常见的是保留标点符号,例如句子之间的句点,作为独立的标记.

推理通过infer_vector()方法进行,该方法采用强制参数doc_words,它应该是一个字符串列表标记,就像在训练期间作为文本单词提供的那样.

您不会在推断文本中提供任何标记:Doc2Vec只会返回一个原始向量,该向量在模型学习的关系中很好地适合文本. (即:向量善于预测文本的单词,就像

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据你提供的代码,我已经补充了 `__mul__` 和 `__imul__` 方法的定义。以下是完整的代码: ```python class Vec: def __init__(self, lst): self.lst = [0, 0, 0] if isinstance(lst, list): self.lst[:] = lst[:] def __mul__(self, V2): if isinstance(V2, Vec): if len(self.lst) != len(V2.lst): raise ValueError("Vectors must have the same length") result = Vec([]) for i in range(len(self.lst)): result.lst[i] = self.lst[i] * V2.lst[i] return result else: raise TypeError("Unsupported operand type") def __imul__(self, val): if isinstance(val, (int, float)): for i in range(len(self.lst)): self.lst[i] *= val return self else: raise TypeError("Unsupported operand type") def __repr__(self): return "Vec:" + str(self.lst) def __str__(self): return "Vec:" + str(self.lst) # 示例用法 v1 = Vec([1, 2, 3]) v2 = Vec([2, 3, 4]) # 向量相乘 v3 = v1 * v2 print(v3) # 输出: Vec:[2, 6, 12] # 向量缩放 v1 *= 2 print(v1) # 输出: Vec:[2, 4, 6] ``` 在这个示例中,`__mul__` 方法重载了 `*` 运算符,用于实现向量的逐元素相乘。如果操作数是 Vec 类型的向量,则返回一个新的 Vec 对象,其元素为两个向量对应位置的乘积。 `__imul__` 方法重载了 `*=` 运算符,用于实现向量缩放。如果操作数是数字类型,则将原向量的每个分量与该数字相乘,并在原地更新原向量。 注意,以上代码只是一个简单的示例,没有处理一些特殊情况(如输入类型错误、向量长度不匹配等),你可以根据需要进行进一步的扩展和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值