Baichuan-7B icon indicating copy to clipboard operation
Baichuan-7B copied to clipboard

是否有embeddings模型释放出来

Open flash0729 opened this issue 1 year ago • 5 comments

Required prerequisites

Questions

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

Checklist

  • [X] I have provided all relevant and necessary information above.
  • [X] I have chosen a suitable title for this issue.

flash0729 avatar Jun 20 '23 01:06 flash0729

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

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

你用 OpenAI的Embedding API 也可以。

ninehills avatar Jun 20 '23 08:06 ninehills

开源的测试了不少了,没有一个效果能在真实产品上使用,主要有两个原因: 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 也可以。

flash0729 avatar Jun 21 '23 06:06 flash0729

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

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

相关的文章:

  • https://openai.com/blog/introducing-text-and-code-embeddings
  • https://openai.com/blog/new-and-improved-embedding-model

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

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

15810856129 avatar Jan 16 '24 12:01 15810856129

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

  • https://openai.com/blog/introducing-text-and-code-embeddings
  • https://openai.com/blog/new-and-improved-embedding-model

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

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

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

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

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

ninehills avatar Jan 17 '24 04:01 ninehills

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

sherlock1987 avatar Apr 22 '24 03:04 sherlock1987