- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个经过训练的自定义 fasttext 模型(fasttext 是 Facebook 开发的词嵌入算法)。我设法在一个函数中获得了预期的结果,但现在我想将它重写成一个定制的转换器,这样我就可以将它添加到我的 sklearn 管道中,因为它只接受转换器。
该函数接受一个词并返回该词的向量:
def name2vector(name=None):
vec = [np.array(model.get_word_vector(w)) for w in name.lower().split(' ')]
name_vec = np.sum(vec, axis=0) # If "name" is multiple words, sum the vectors
return (name_vec)
返回值:
array([-0.01087821, 0.01030535, -0.01402427, 0.0310982 , 0.08786983,
-0.00404521, -0.03286128, -0.00842709, 0.03934859, -0.02717219,
0.01151722, -0.03253938, -0.02435859, 0.03330994, -0.03696496], dtype=float32))
我希望更改器(mutator)做与函数相同的事情。我知道我可以使用 BaseEstimator
和 TransformerMixin
通过读取 tutorial 将其重写为转换器但我仍然坚持这一点。一些建议会很好,谢谢。
最佳答案
假设您正在使用 pandas DataFrame,您可以这样做:
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
class FastTextTransformer(TransformerMixin, BaseEstimator):
def __init__(self, model):
self.model = model
def get_params(self, deep):
return {'dimension': self.model.get_dimension()}
def fit(self, X, y):
# We assume the FT model was already fit
return self
def transform(self, X):
X_copy = X.copy()
X_copy = X_copy.apply(self.name2vector)
return pd.DataFrame(X_copy.tolist())
def name2vector(self, name):
vec = [np.array(self.model.get_word_vector(w)) for w in name.lower().split(' ')]
name_vec = np.sum(vec, axis=0) # If "name" is multiple words, sum the vectors
return name_vec
为了演示用法,让我们加载一个 fasttext 模型和一个亚马逊评论的示例数据集:
import fasttext as ft
ft_model = ft.load_model('amazon_review_polarity.ftz')
amz_df = pd.read_html('https://huggingface.co/datasets/amazon_polarity/viewer/amazon_polarity/test')[0]
amz_df.rename(columns={'content (string)': 'content', 'label (class label)': 'label'}, inplace=True)
amz_df
然后将其用作真正的 scikit-learn 管道。
pipe = Pipeline([
('ft', FastTextTransformer(ft_model)),
('clf', LogisticRegression()),
])
现在我们可以拟合和预测
pipe.fit(amz_df['content'], amz_df.label)
pipe.predict(pd.Series(['great', 'very cool', 'very disappointed']))
哪个返回
array(['positive', 'positive', 'negative'], dtype=object)
注意如果您想计算句子中单词的平均值,而不是总和,您可以将 name2vector
替换为内置方法 get_sentence_vector
。对于监督模型,它将返回平均值。对于无监督的(CBOW 和 skipgram),它首先将每个向量除以其 L2 范数,然后取平均值。
查看讨论 here .
关于python - 编写一个 fasttext 自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65300462/
我尝试在 fasttext 中为 Python 中的英文单行创建句子向量,但我得到的只是与 fasttext 中的 CLI 相关的解决方案。 Link for fast test sentence v
我正在使用预训练的 FastText 模型设置 nlp 预处理来查询和保存词向量。我遇到了 FileNotFoundError: [Errno 2] No such file or directory
请原谅我的新手,但 fasttext 在 python 上不适合我。我正在使用运行 python 3.6 的 anaconda。我的代码如下(只是一个例子): import fasttext mode
我无法运行 FastText 量化,如文档中所示。具体来说,如备忘单页面底部所示: https://fasttext.cc/docs/en/cheatsheet.html 当我尝试在我的训练模型“mo
我正在研究一个文本分类问题,也就是说,给定一些文本,我需要为其分配某些给定的标签。 我曾尝试使用 Facebook 的快速文本库,它有两个我感兴趣的实用程序: A) 带有预训练模型的词向量 B) 文本
我正在尝试使用此命令量化 fasttext 中的无监督模型。 model.quantize(input=train_data, qnorm=True, retrain=True, cutoff=200
目前我正在研究堆栈溢出标签预测,其中使用 fasttext 进行文本分类。 我想知道如果标签多类,标签的正确格式是什么。 1.) __label__toxic__label__racist__lab
我想了解创建句子的 fastText 向量的方式。根据这个issue 309 ,句子的向量是通过对单词的向量进行平均得到的。 为了证实这一点,我写了下面的脚本: import numpy as np
我刚刚开始使用 FastText。我正在通过将数据集的 .csv 文件用作输入来对小型数据集进行交叉验证。要处理我使用此参数的数据集: model = fasttext.train_supervis
我有一个经过训练的自定义 fasttext 模型(fasttext 是 Facebook 开发的词嵌入算法)。我设法在一个函数中获得了预期的结果,但现在我想将它重写成一个定制的转换器,这样我就可以将它
在 FastText 中,我有不平衡的标签。处理它的最佳方法是什么? 最佳答案 Fasttext 似乎可以很好地处理不平衡数据。 根据FAQ Note also that this loss is t
我正在训练一个 fastText模型使用 gensim.models.fasttext .但是,我似乎找不到一种方法来计算迭代损失以进行记录。如果我看 gensim.models.word2vec ,
背景 我想执行代码以使用 fastText 对每个文本的语言进行分类。 我做了什么 下载模型lid.176.bin https://fasttext.cc/docs/en/language-ident
我阅读了这篇论文,并在谷歌上搜索了是否有任何学习方法(或更可能的学习过程)的好例子 对于word2vec,假设有语料库句子 I go to school with lunch box that my
我正在使用 FastText ( fastText_multilingual ) 的修改版本,它可以让我对齐两种语言的单词。 我试图理解他们的 fasttext.py,尤其是 Fast Vector
要获取单词的向量,我可以使用: model["word"] 但是如果我想得到一个句子的向量,我需要对所有单词的向量求和或者对所有向量求平均值。 FastText 是否提供了执行此操作的方法? 最佳答案
我在将快速 FastText 向量转换回单词时遇到问题。这是我的 Python 代码: from gensim.models import KeyedVectors en_model = KeyedV
我正在使用 Gensim 加载我的 fasttext .vec 文件,如下所示。 m=load_word2vec_format(filename, binary=False) 但是,如果我需要加载 .
我已经下载了一个.bin FastText 模型,我将它与gensim 一起使用,如下所示: model = FastText.load_fasttext_format("cc.fr.300.bin"
我正在使用 gensim 加载预训练的 fasttext 模型。我从 fasttext website 下载了英文维基百科训练模型。 这是我为加载预训练模型编写的代码: from gensim.mod
我是一名优秀的程序员,十分优秀!