我尝试将句子映射到向量,以使句子相互比较。为了测试 gensim 的 Doc2Vec 模型,我下载了 sklearn 的新闻组数据集并在其上训练模型。
为了比较两个句子,我使用 model.infer_vector() 并且我想知道为什么使用同一句子的两个调用会为我提供不同的向量:
model = Doc2Vec(vector_size=100, window=8, min_count=5, workers=6)
model.build_vocab(documents)
epochs=10
for epoch in range(epochs):
print("Training epoch %d" % (epoch+1))
model.train(documents, total_examples=len(documents), epochs=epochs)
v1 = model.infer_vector("I feel good")
v2 = model.infer_vector("I feel good")
print(np.linalg.norm(v1-v2))
Run Code Online (Sandbox Code Playgroud)
输出:
训练时期 1
0.41606528
训练时期 2
0.43440753
训练纪元 3
0.3203116
训练纪元 4
0.3039317
训练纪元 5
0.68224543
训练时期 6
0.5862567
训练纪元 7
0.5424634
训练纪元 8
0.7618142
训练纪元 9
0.8170159
训练纪元 10
0.6028216
如果我设置 alpha 和 min_alpha = 0,我会得到“我感觉很好”和“我感觉很好”的一致向量,但模型在每个时期都给我相同的向量,所以它似乎没有学到任何东西:
训练时期 1 …
阅读 gensim文档中的教程后,我不明白从训练模型生成新嵌入的正确方法是什么。到目前为止,我已经训练了 gensim 的快速文本嵌入,如下所示:
from gensim.models.fasttext import FastText as FT_gensim
model_gensim = FT_gensim(size=100)
# build the vocabulary
model_gensim.build_vocab(corpus_file=corpus_file)
# train the model
model_gensim.train(
corpus_file=corpus_file, epochs=model_gensim.epochs,
total_examples=model_gensim.corpus_count, total_words=model_gensim.corpus_total_words
)
Run Code Online (Sandbox Code Playgroud)
然后,假设我想获得与这些句子相关的嵌入向量:
sentence_obama = 'Obama speaks to the media in Illinois'.lower().split()
sentence_president = 'The president greets the press in Chicago'.lower().split()
Run Code Online (Sandbox Code Playgroud)
我怎样才能让他们得到model_gensim我以前训练过的东西?
我是新手(golang)。这就是为什么我的问题可能无关紧要(或无法回答)。
我创建了两个结构。这两个都嵌入了另一个结构。现在我想更新函数内嵌入结构的字段。
package main
import (
"fmt"
"reflect"
"time"
)
type Model struct {
UpdatedAt time.Time
}
type Fruit struct {
Model
label string
}
type Animal struct {
Model
label string
}
func update(v interface{}) {
reflectType := reflect.TypeOf(v)
reflectKind := reflectType.Kind()
if reflectKind == reflect.Ptr {
reflectType = reflectType.Elem()
}
m := reflect.Zero(reflectType)
fmt.Println(m)
}
func main() {
apple := &Fruit{
label: "Apple",
}
tiger := &Animal{
label: "Tiger",
}
update(apple)
update(tiger)
fmt.Println(apple)
fmt.Println(tiger)
}
Run Code Online (Sandbox Code Playgroud)
我希望实现该update函数,以便它将当前时间放入 …
在 PyTorch 中,torch.nn.function.embedding_bag 似乎是负责执行嵌入查找的实际工作的主要函数。在 PyTorch 的文档中,提到 embedding_bag 可以完成其工作 > 无需实例化中间嵌入。这究竟意味着什么?这是否意味着例如当模式为“sum”时它会进行就地求和?或者它只是意味着在调用 embedding_bag 时不会产生额外的张量,但仍然从系统的角度来看,所有中间行向量已经被提取到处理器中以用于计算最终张量?
我尝试将 Julia v1.4.2 嵌入到使用 Visual Studio 2017 v15.0 构建的简单 C++ 控制台应用程序中。我遵循https://docs.julialang.org/en/v1/manual/embedding/#High-Level-Embedding-on-Windows-with-Visual-Studio-1上的官方文档。然而,当输入
#include <julia.h>
VS 时,会出现一系列超过 25 个错误,例如:
errhandlingapi.h 中未定义标识符“PCONTEXT”
标识符“PCONTEXT”在 WinBase.h 中未定义
标识符“PSLIST_HEADER”在 WinBase.h 中未定义
...
我有一个嵌入类型 B 的类型 T,并且 *B 实现了 I。 *T 可以分配给类型 I 的变量,但不是在 T 的情况下,这是否意味着 (*T) 的方法集包含值和B的指针接收器?
package main
import (
"fmt"
)
type I interface {
Foo()
}
type B struct {}
type T struct {
B
}
func (a *B) Foo() {
fmt.Println("Bar")
}
func main() {
t := T{B{}}
// var i I = t -> error
var i I = &t
i.Foo()
}
Run Code Online (Sandbox Code Playgroud) 我记得在某个地方可以使用C语言调用python方法
#include "python.h"
Run Code Online (Sandbox Code Playgroud)
但我似乎无法找到这个或任何例子的来源.
如何在C程序中调用python方法?
我正在训练一个模型,该模型采用标记化的字符串,然后通过嵌入层和 LSTM。但是,输入中似乎存在错误,因为它没有通过嵌入层。
class DrugModel(nn.Module):
def __init__(self, input_dim, output_dim, hidden_dim, drug_embed_dim,
lstm_layer, lstm_dropout, bi_lstm, linear_dropout, char_vocab_size,
char_embed_dim, char_dropout, dist_fn, learning_rate,
binary, is_mlp, weight_decay, is_graph, g_layer,
g_hidden_dim, g_out_dim, g_dropout):
super(DrugModel, self).__init__()
# Save model configs
self.drug_embed_dim = drug_embed_dim
self.lstm_layer = lstm_layer
self.char_dropout = char_dropout
self.dist_fn = dist_fn
self.binary = binary
self.is_mlp = is_mlp
self.is_graph = is_graph
self.g_layer = g_layer
self.g_dropout = g_dropout
self.device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# For one-hot encoded SMILES
if not is_mlp:
self.char_embed = nn.Embedding(char_vocab_size, char_embed_dim,
padding_idx=0) …Run Code Online (Sandbox Code Playgroud) 我正在尝试构建一个简单的 RAG,但我陷入了这段代码:
from langchain.embeddings.huggingface import HuggingFaceEmbeddings
from llama_index import LangchainEmbedding, ServiceContext
embed_model = LangchainEmbedding(
HuggingFaceEmbeddings(model_name="thenlper/gte-large")
)
service_context = ServiceContext.from_defaults(
chunk_size=256,
llm=llm,
embed_model=embed_model
)
index = VectorStoreIndex.from_documents(documents, service_context=service_context)
Run Code Online (Sandbox Code Playgroud)
我在哪里得到 ImportError: Cannot import name 'LangchainEmbedding' from 'llama_index' 我该如何解决?这和我从事 Colab 工作有关吗?
假设我有这两种结构:
type A struct {
Mutex sync.Mutex
i int
}
type B struct {
A
sync.Mutex
}
Run Code Online (Sandbox Code Playgroud)
现在,当我试图锁定B然后A我遇到了僵局:
var b B
b.Lock()
b.Mutex.Lock()
b.Mutex.Unlock()
b.Unlock()
Run Code Online (Sandbox Code Playgroud)
我想通了,这是与结构的互斥体的名字相关A,例如,有是,如果我将其命名为无僵局Mutexx,而不是Mutex.但我不知道为什么这很重要.有人可以解释一下这种行为吗?
让我们说在第三方库中我们有一个接口和一个实现这个接口的结构.我们还假设有一个函数将ParentInterface作为参数,它对不同类型具有不同的行为.
type ParentInterface interface {
SomeMethod()
}
type ParentStruct struct {
...
}
func SomeFunction(p ParentInterface) {
switch x := p.Type {
case ParentStruct:
return 1
}
return 0
}
Run Code Online (Sandbox Code Playgroud)
在我们的代码中,我们想要使用这个接口,但是使用我们的增强行为,所以我们将它嵌入到我们自己的结构中.编译器实际上允许我们ParentInterface直接在我的struct上调用函数:
type MyStruct struct {
ParentInterface
}
parentStruct := ParentStruct{...}
myStruct := MyStruct{parentStruct}
parentStruct.SomeMethod() // Compiler OK.
myStruct.SomeMethod() // Compiler OK. Result is same. Great.
SomeFunction(parentStruct) // Compiler OK. Result is 1.
SomeFunction(myStruct.ParentInterface) // Compiler OK. Result is 1.
SomeFunction(myStruct) // Compiler OK. Result is 0. (!)
Run Code Online (Sandbox Code Playgroud)
最后一例不是问题吗?我不止一次遇到过这种错误.因为我愉快地使用 …
type Req struct {
apiVersion string
path string
resourceEndpoint string
accessKey string
log *logrus.Entry
incomingReq interface{}
httpClient lib.HTTPClient
redisClient redis.Cmdable
ctx context.Context
}
type TestReq struct {
Req
}
Run Code Online (Sandbox Code Playgroud)
根据this this question及其答案,我觉得我应该能够做到以下几点:
req := &Req{}
req = TestReq(req)
Run Code Online (Sandbox Code Playgroud)
但是我在 VsCode 中收到此错误:
无法将 req(*Req 类型的变量)转换为 TestReq 编译器(InvalidConversion)
这两个结构体是否具有相同的底层字段?如果是这样,为什么第一个不能转换为第二个?