baichuan-inc / Baichuan-7B

A large-scale 7B pretraining language model developed by BaiChuan-Inc.
https://huggingface.co/baichuan-inc/baichuan-7B
Apache License 2.0
5.67k stars 506 forks source link

是否有embeddings模型释放出来 #69

Open flash0729 opened 1 year ago

flash0729 commented 1 year ago

Required prerequisites

Questions

你好,我想问下,是否像open ai一样,有相关的embeddings模型释放出来 最好支持批量和单个输入文本两个方法: 1、embed_documents(texts: List[str]) -> List[List[float]] 2、embed_query(text: str) -> List[float]

Checklist

ninehills commented 1 year ago

如果是做 Embeddings QA的话,Embeddings 模型没必要和基础模型相同,找一个其他的开源 Embeddings 的实现就行了。

目前效果比较好的是:https://huggingface.co/moka-ai/m3e-base

你用 OpenAI的Embedding API 也可以。

flash0729 commented 1 year ago

开源的测试了不少了,没有一个效果能在真实产品上使用,主要有两个原因: 1、几乎开源的都是句子级别的Embeddings 2、相似度排序效果上都存在一些问题,肉眼看着比较像的句子排序在top3之后

有记录的测试包括以下模型 shibing624/text2vec-base-chinese GanymedeNil/text2vec-large-chinese moka-ai/m3e-small moka-ai/m3e-base nghuyong/ernie-3.0-nano-zh nghuyong/ernie-3.0-base-zh

效果明显高出一大截的还是openai的Embeddings,但是无法本地化 期待大模型的副产品Embeddings模型也释放出来

如果是做 Embeddings QA的话,Embeddings 模型没必要和基础模型相同,找一个其他的开源 Embeddings 的实现就行了。

目前效果比较好的是:https://huggingface.co/moka-ai/m3e-base

你用 OpenAI的Embedding API 也可以。

15810856129 commented 8 months ago

LLM 模型的 embedding 不用单独找,本身就可以很方便的使用,就是那个 Tokenizer。

但是LLM 模型自带的 embeddings 和你想要的 embedding 是两码事,需要专门针对这个场景进行重新的训练才可以,不是直接用LLM自带的。

相关的文章:

这个 embedding 模型并不是大模型的副产品,它只是利用了大模型的预训练语料库而已,实际上就是一个单独的模型。

请教一下,如果我想用LLM模型获取一个句子的embedding,该如何操作得到呢?比如获取模型最后一层的hidden_states来作为embedding么?

ninehills commented 8 months ago

LLM 模型的 embedding 不用单独找,本身就可以很方便的使用,就是那个 Tokenizer。 但是LLM 模型自带的 embeddings 和你想要的 embedding 是两码事,需要专门针对这个场景进行重新的训练才可以,不是直接用LLM自带的。 相关的文章:

这个 embedding 模型并不是大模型的副产品,它只是利用了大模型的预训练语料库而已,实际上就是一个单独的模型。

请教一下,如果我想用LLM模型获取一个句子的embedding,该如何操作得到呢?比如获取模型最后一层的hidden_states来作为embedding么?

嗯,我写这篇文章的时候理解还比较浅。

获取最后一层隐藏层就可以。encoder模型的话,可以选CLS token的向量表示,因为它具备整个句子的语义。 decoder 模型的话,可以选最后一个token或者所有token的平均。

这里有一个专门训练的模型,你看下他的实例代码。 https://huggingface.co/intfloat/e5-mistral-7b-instruct

sherlock1987 commented 4 months ago

想问一下,一般embedding模型和普通的文本类输出模型是什么关系?是训练一个好的embedding基座,之后的chat 模型可以基于这个embedding模型进行微调吗?