yuanzhoulvpi2017 / DocumentSearch

基于sentence transformers和chatglm实现的文档搜索工具
Apache License 2.0
154 stars 19 forks source link

embedding #1

Open yangliuIOC opened 1 year ago

yangliuIOC commented 1 year ago

为什么 我换成 sber的取embedding 效果差很多,

yuanzhoulvpi2017 commented 1 year ago
  1. 可能是因为你的sbert的pool层不对。改一改pool层的参数,效果基本上就一样了
  2. 模型是不是也有差异
yangliuIOC commented 1 year ago

其实 ,这就类似于用 sber进行召回,在排序,再用glm问答,感觉 主要是在召回这里 和排序,怎么能够更加准确,

hjing100 commented 1 year ago

看代码里好像是基于bert得到的embedding表示,不是Sbert预训练模型,或者可以试试Cosent

yuanzhoulvpi2017 commented 1 year ago

其实 ,这就类似于用 sber进行召回,在排序,再用glm问答,感觉 主要是在召回这里 和排序,怎么能够更加准确,

是的,就是这个意思

yangliuIOC commented 1 year ago

我看您直接去的第一列【:,0】,但是我用了 meanpooling 效果比这个要差。。

yuanzhoulvpi2017 commented 1 year ago

看代码里好像是基于bert得到的embedding表示,不是Sbert预训练模型,或者可以试试Cosent

  1. sbert对于【非sbert预训练模型】做的操作,也就是加了pool层。
  2. 本质都差不多的
yuanzhoulvpi2017 commented 1 year ago

我看您直接去的第一列【:,0】,但是我用了 meanpooling 效果比这个要差。。

确实,meanpooling效果比较差,之前也是试过

hjing100 commented 1 year ago

看代码里好像是基于bert得到的embedding表示,不是Sbert预训练模型,或者可以试试Cosent

  1. sbert对于【非sbert预训练模型】做的操作,也就是加了pool层。
  2. 本质都差不多的

这样子啊,那如果换成sbert预训练的,或许效果会更好。 有一点疑问:如果 sbert对于【非sbert预训练模型】做的操作,这么做的意义在哪里?

hjing100 commented 1 year ago

想顺便请教一下,在用pypdf包读取pdf文件时,遇到过GBK-EUC-H的warning吗

yangliuIOC commented 1 year ago

我发现很多召回的句子里有问题的答案,也回答不出来了。,。。 不知道是不是因为您对text2chatglm 这里面的都已经去除标点符号了,加上了换行。

yangliuIOC commented 1 year ago

想顺便请教一下,在用pypdf包读取pdf文件时,遇到过GBK-EUC-H的warning吗

没有

yuanzhoulvpi2017 commented 1 year ago

看代码里好像是基于bert得到的embedding表示,不是Sbert预训练模型,或者可以试试Cosent

  1. sbert对于【非sbert预训练模型】做的操作,也就是加了pool层。
  2. 本质都差不多的

这样子啊,那如果换成sbert预训练的,或许效果会更好。 有一点疑问:如果 sbert对于【非sbert预训练模型】做的操作,这么做的意义在哪里?

  1. 换成sbert并不会更好。sbert本质就是Transformers + pool层,我这里做的是一摸一样的。
  2. 建议你可以看看我之前写的知乎文章:Sentence Embedding 现在的 sota 方法是什么?
  3. 建议阅读sbert源码
yangliuIOC commented 1 year ago

我把您的代码里面的去除标点符号那个删除了之后,发现好多都变好了。。。。

yuanzhoulvpi2017 commented 1 year ago

我发现很多召回的句子里有问题的答案,也回答不出来了。,。。 不知道是不是因为您对text2chatglm 这里面的都已经去除标点符号了,加上了换行。

这个说起来复杂:

  1. 转向量的时候,去掉特殊字符。
  2. 向上索引的时候,会向上索引整个段落。

看你需求吧,你觉得去掉好一点,就去掉。但是不建议去掉

hjing100 commented 1 year ago

看代码里好像是基于bert得到的embedding表示,不是Sbert预训练模型,或者可以试试Cosent

  1. sbert对于【非sbert预训练模型】做的操作,也就是加了pool层。
  2. 本质都差不多的

这样子啊,那如果换成sbert预训练的,或许效果会更好。 有一点疑问:如果 sbert对于【非sbert预训练模型】做的操作,这么做的意义在哪里?

  1. 换成sbert并不会更好。sbert本质就是Transformers + pool层,我这里做的是一摸一样的。
  2. 建议你可以看看我之前写的知乎文章:Sentence Embedding 现在的 sota 方法是什么?
  3. 建议阅读sbert源码

好的,感觉是基于bert预训练模型 只用了Sbert的pool操作,具体我再看看。 想之后试试shibing624/text2vec-base-chinese预训练模型

yuanzhoulvpi2017 commented 1 year ago

看代码里好像是基于bert得到的embedding表示,不是Sbert预训练模型,或者可以试试Cosent

  1. sbert对于【非sbert预训练模型】做的操作,也就是加了pool层。
  2. 本质都差不多的

这样子啊,那如果换成sbert预训练的,或许效果会更好。 有一点疑问:如果 sbert对于【非sbert预训练模型】做的操作,这么做的意义在哪里?

  1. 换成sbert并不会更好。sbert本质就是Transformers + pool层,我这里做的是一摸一样的。
  2. 建议你可以看看我之前写的知乎文章:Sentence Embedding 现在的 sota 方法是什么?
  3. 建议阅读sbert源码

好的,感觉是基于bert预训练模型 只用了Sbert的pool操作,具体我再看看。 想之后试试shibing624/text2vec-base-chinese预训练模型

可以换试一试,后面可以同步一下效果