PrithivirajDamodaran / FlashRank

Lite & Super-fast re-ranking for your search & retrieval pipelines. Supports SoTA Listwise and Pairwise reranking based on LLMs and cross-encoders and more. Created by Prithivi Da, open for PRs & Collaborations.
Apache License 2.0
595 stars 44 forks source link

Wrong scoring when the query and 1 sentence in a passage is the same. #3

Closed andy1xx8 closed 9 months ago

andy1xx8 commented 9 months ago

Hi Im trying to test your ranking with Vietnamese data and got a weird result like this:

Query:  [Đầu tư căn hộ TP. Thủ Đức - Kỳ 2] Tiềm năng lợi nhuận đầu tư căn hộ TP. Thủ Đức như thế nào??
0.94775605   [Chuyên đề căn hộ Quận Thủ Đức - Kỳ 2] Tiện ích - hạ tầng đang hiện hữu tại thị trường căn hộ chung cư quận Thủ Đức
0.9460485    Chuyên Đề: Tiềm Năng Đầu Tư Căn Hộ TP Thủ Đức Quý II/2023
0.9404418    Có nên đầu tư căn hộ Empire City Thủ Thiêm?
0.93990564   [Đầu tư căn hộ TP. Thủ Đức - Kỳ 1]: Mức độ đô thị hóa và cơ sở hạ tầng TP. Thủ Đức đang như thế nào?
0.937425     [Đầu tư căn hộ TP. Thủ Đức - Kỳ 3]: Nhận diện những rủi ro tiềm ẩn khi đầu tư căn hộ
0.92928797   Infographic: Phân tích tiềm năng đầu tư dự án nhà phố, biệt thự TP Thủ Đức năm 2021
0.924897     [Chuyên đề căn hộ Quận Thủ Đức - Kỳ 3] Tiềm năng thị trường căn hộ chung cư quận Thủ Đức
0.9248124    Các dự án nhà phố, biệt thự Quận 2 (TP Thủ Đức) hiện có mức giá ra sao?
0.92082846   [Chuyên đề căn hộ Quận Thủ Đức - Kỳ 6] Các chủ đầu tư đang triển khai dự án căn hộ chung cư quận Thủ Đức
0.9133441    4 lý do bạn nên đầu tư căn hộ tại Thành phố Thủ Đức
0.84951854   Thông tin chi tiết về TP. Thủ Đức và các dự án chung cư nổi bật
0.84106666   Phân tích chi tiết tiềm năng đầu tư bất động sản TP Thủ Đức năm 2022
0.8402047    Cập nhật giá bán các dự án biệt thự, nhà phố tại TP Thủ Đức (Mới nhất)
0.7789081    Mua căn hộ Thủ Thiêm: Những thông tin bạn cần phải biết!
0.1311889    [Đầu tư căn hộ TP. Thủ Đức - Kỳ 2] Tiềm năng lợi nhuận đầu tư căn hộ TP. Thủ Đức như thế nào??

The last result is exactly the same as the query but got the lowest score. This is so weird to me.

0.1311889    [Đầu tư căn hộ TP. Thủ Đức - Kỳ 2] Tiềm năng lợi nhuận đầu tư căn hộ TP. Thủ Đức như thế nào??

Here is the code snippet to produce the above result


class RankerTestCase(unittest.TestCase):

    def test_flash_rank(self):
        passages = [
            "[Đầu tư căn hộ TP. Thủ Đức - Kỳ 2] Tiềm năng lợi nhuận đầu tư căn hộ TP. Thủ Đức như thế nào??",
            "[Đầu tư căn hộ TP. Thủ Đức - Kỳ 1]: Mức độ đô thị hóa và cơ sở hạ tầng TP. Thủ Đức đang như thế nào?",
            "[Đầu tư căn hộ TP. Thủ Đức - Kỳ 3]: Nhận diện những rủi ro tiềm ẩn khi đầu tư căn hộ",
            "Chuyên Đề: Tiềm Năng Đầu Tư Căn Hộ TP Thủ Đức Quý II/2023",
            "Infographic: Phân tích tiềm năng đầu tư dự án nhà phố, biệt thự TP Thủ Đức năm 2021",
            "Các dự án nhà phố, biệt thự Quận 2 (TP Thủ Đức) hiện có mức giá ra sao?",
            "[Chuyên đề căn hộ Quận Thủ Đức - Kỳ 3] Tiềm năng thị trường căn hộ chung cư quận Thủ Đức",
            "[Chuyên đề căn hộ Quận Thủ Đức - Kỳ 6] Các chủ đầu tư đang triển khai dự án căn hộ chung cư quận Thủ Đức",
            "[Chuyên đề căn hộ Quận Thủ Đức - Kỳ 2] Tiện ích - hạ tầng đang hiện hữu tại thị trường căn hộ chung cư quận Thủ Đức",
            "Có nên đầu tư căn hộ Empire City Thủ Thiêm?",
            "Phân tích chi tiết tiềm năng đầu tư bất động sản TP Thủ Đức năm 2022",
            "Cập nhật giá bán các dự án biệt thự, nhà phố tại TP Thủ Đức (Mới nhất)",
            "Thông tin chi tiết về TP. Thủ Đức và các dự án chung cư nổi bật",
            "Mua căn hộ Thủ Thiêm: Những thông tin bạn cần phải biết!",
            "4 lý do bạn nên đầu tư căn hộ tại Thành phố Thủ Đức"
        ]

        from flashrank.Ranker import Ranker
        ranker = Ranker(model_name="ms-marco-MultiBERT-L-12", cache_dir="./.pytest_cache")

        query = "[Đầu tư căn hộ TP. Thủ Đức - Kỳ 2] Tiềm năng lợi nhuận đầu tư căn hộ TP. Thủ Đức như thế nào??"
        results = ranker.rerank(query, passages)
        print('\nQuery: ', query)
        for r in results:
            print(r['score'], '\t', r['passage'])
PrithivirajDamodaran commented 9 months ago

If the query is identical to one of the passages in ANY language not just your language, They are not ranked 1st, they are ranked last and oddly scored low. This includes English WHEN using optimised multilingual models.

But you won't observe this problem in the optimised english only models with English text. Identical passage gets ranked appropriately.

We have observed this early on with multilingual model.

[Solution] Semantically speaking it may sound like a challenge but practically speaking query identical to passage doesn't make realistic sense. But If in your system users can type queries identical to passages and/or if this usecase is important to you, You have 3 options

  1. Use Flashrank & Workaround it post-hoc, because checking if query == passage and manually pushing it isn't hard.
  2. Fine-tune bert-base-multilingual-cased on custom Vietnamese data and use it for ranking. Fair warning model is 700MB. You might need GPU for a faster inference.
  3. Fine-tune BAAI/bge-reranker-base on custom Vietnamese data and use it for ranking. using this script. Fair warning model is 1.1GB. You might need GPU for a faster inference.

Wish you the best