afschowdhury commited on
Commit
16789c3
1 Parent(s): 6829e2f

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +137 -91
README.md CHANGED
@@ -7,46 +7,74 @@ tags:
7
  - transformers
8
  - dense-passage-retrieval
9
  widget:
10
- - source_sentence: আফগানিস্তান কত রান করেছিল
11
  sentences:
12
- - >-
13
- ম্যাচটা সিকান্দার রাজারই ছিল। অন্তত রান তাড়ায় নামা শ্রীলঙ্কার ইনিংসের ১৫
14
- ওভার পর্যন্ত অবশ্যই। কিন্তু ব্যাটে বলে দারুণ খেলা জিম্বাবুয়ে অধিনায়ককে হাসতে
15
- দিলেন না শ্রীলঙ্কার দুই অভিজ্ঞ ক্রিকেটার। অ্যাঞ্জেলো ম্যাথুস-দাসুন শানাকার
16
- সপ্তম উইকেট জুটি ম্যাচ বের করে নেয় জিম্বাবুয়ের নাগাল থেকে। ম্যাথুস অবশ্য
17
- দলকে জিতিয়ে ফিরতে পারেননি। তিনি যখন আউট হন, ২ বলে ৬ রান দরকার শ্রীলঙ্কার।
18
- দুষ্মন্ত চামিরা ৪ ও ২ রান নিয়ে শেষ বলে গড়ানো ম্যাচে জয় এনে দলকে।
19
- - >-
20
- অক্ষর প্যাটেল অর্শদীপ সিংয়ের দারুণ বোলিংয়ের পর যশস্বী জয়সোয়াল ও শিবম দুবের
21
- জোড়া অর্ধশতকে ইন্দোরে সহজ জয়ে এক ম্যাচ বাকি থাকতেই সিরিজ জিতেছে ভারত।
22
- ইন্দোরে তিনে নামা গুলবদিন নাইবের ৩৫ বলে ৫৭ রানের ইনিংসে আফগানিস্তান তুলেছিল
23
- ১৭২ রান, কিন্তু ভারত সেটি পেরিয়ে গেছে ২৬ বল ও ৬ উইকেট বাকি রেখেই।
24
- - >-
25
- এদিন প্রথম থেকে আক্রমণ ও বল দখলে এগিয়ে ছিল মিসরই। প্রতিযোগিতার সবচেয়ে সফল
26
- দলটির এগিয়ে যেতে সময় লাগে মাত্র ২ মিনিট। বাঁ পাশ থেকে আসা ক্রসে সালাহ চেষ্টা
27
- করেও ঠিকঠাক সংযোগ ঘটাতে পারেননি। তবে তাঁর পায়ের ছোঁয়ায় বল আসে মোস্তফা
28
- মোহাম্মদের কাছে। ভুল করেননি এই ফরোয়ার্ড। দারুণ ফিনিশিংয়ে গোল করে এগিয়ে দেন
29
- দলকে।
30
- - >-
31
- আবহাওয়া বেলুনটি ঢাকা থেকে ১২০ কিলোমিটার দূরে কুমিল্লায় অক্ষত অবস্থায় অবতরণ
32
- করে। আবহাওয়া পর্যবেক্ষণ বেলুনটি বায়ুমণ্ডলের বিভিন্ন উচ্চতায় তাপমাত্রা,
33
- আর্দ্রতা, বাতাসের গতি এবং বায়ুমণ্ডলের অবস্থা পরিমাপ করার জন্য তৈরি করা
34
- হয়েছে। এক সংবাদ বিজ্ঞপ্তিতে এ তথ্য জানিয়েছে এআইইউবি।
35
- example_title: Bengali News Example
36
  language:
37
  - bn
38
- datasets:
39
- - afschowdhury/mujib-dataset
40
- - csebuetnlp/squad_bn
41
  ---
42
 
43
- # {MODEL_NAME}
44
 
45
- This is a [sentence-transformers](https://www.SBERT.net) model: It maps sentences & paragraphs to a 768 dimensional dense vector space and can be used for tasks like clustering or semantic search.
 
 
46
 
47
  <!--- Describe your model here -->
48
 
49
- ## Usage (Sentence-Transformers)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
  Using this model becomes easy when you have [sentence-transformers](https://www.SBERT.net) installed:
52
 
@@ -57,96 +85,114 @@ pip install -U sentence-transformers
57
  Then you can use the model like this:
58
 
59
  ```python
60
- from sentence_transformers import SentenceTransformer
61
- sentences = ["This is an example sentence", "Each sentence is converted"]
62
-
63
- model = SentenceTransformer('{MODEL_NAME}')
64
- embeddings = model.encode(sentences)
65
- print(embeddings)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  ```
67
 
 
68
 
69
-
70
- ## Usage (HuggingFace Transformers)
71
  Without [sentence-transformers](https://www.SBERT.net), you can use the model like this: First, you pass your input through the transformer model, then you have to apply the right pooling-operation on-top of the contextualized word embeddings.
72
 
73
  ```python
74
  from transformers import AutoTokenizer, AutoModel
75
  import torch
 
76
 
77
-
78
- #Mean Pooling - Take attention mask into account for correct averaging
79
  def mean_pooling(model_output, attention_mask):
80
- token_embeddings = model_output[0] #First element of model_output contains all token embeddings
81
  input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
82
  return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
83
 
84
 
85
- # Sentences we want sentence embeddings for
86
- sentences = ['This is an example sentence', 'Each sentence is converted']
87
-
88
- # Load model from HuggingFace Hub
89
- tokenizer = AutoTokenizer.from_pretrained('{MODEL_NAME}')
90
- model = AutoModel.from_pretrained('{MODEL_NAME}')
91
-
92
- # Tokenize sentences
93
- encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
94
 
95
- # Compute token embeddings
96
- with torch.no_grad():
97
- model_output = model(**encoded_input)
98
 
99
- # Perform pooling. In this case, mean pooling.
100
- sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
101
 
102
- print("Sentence embeddings:")
103
- print(sentence_embeddings)
104
- ```
 
105
 
106
 
 
 
 
 
 
107
 
108
- ## Evaluation Results
 
 
109
 
110
- <!--- Describe how your model was evaluated -->
 
 
111
 
112
- For an automated evaluation of this model, see the *Sentence Embeddings Benchmark*: [https://seb.sbert.net](https://seb.sbert.net?model_name={MODEL_NAME})
 
113
 
 
 
114
 
115
- ## Training
116
- The model was trained with the parameters:
117
 
118
- **DataLoader**:
 
 
119
 
120
- `torch.utils.data.dataloader.DataLoader` of length 30470 with parameters:
121
- ```
122
- {'batch_size': 32, 'sampler': 'torch.utils.data.sampler.RandomSampler', 'batch_sampler': 'torch.utils.data.sampler.BatchSampler'}
123
  ```
124
 
125
- **Loss**:
 
 
 
 
 
 
 
126
 
127
- `sentence_transformers.losses.MSELoss.MSELoss`
 
128
 
129
- Parameters of the fit()-Method:
130
- ```
131
- {
132
- "epochs": 2,
133
- "evaluation_steps": 0,
134
- "evaluator": "NoneType",
135
- "max_grad_norm": 1,
136
- "optimizer_class": "<class 'torch.optim.adamw.AdamW'>",
137
- "optimizer_params": {
138
- "eps": 1e-06,
139
- "lr": 2e-05
140
- },
141
- "scheduler": "WarmupLinear",
142
- "steps_per_epoch": null,
143
- "warmup_steps": 6094,
144
- "weight_decay": 0.01
145
- }
146
- ```
147
 
 
 
 
148
 
149
  ## Full Model Architecture
 
150
  ```
151
  SentenceTransformer(
152
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
@@ -154,6 +200,6 @@ SentenceTransformer(
154
  )
155
  ```
156
 
157
- ## Citing & Authors
158
-
159
- <!--- Describe where people can find more information -->
 
7
  - transformers
8
  - dense-passage-retrieval
9
  widget:
10
+ - source_sentence: "আফগানিস্তান কত রান করেছিল"
11
  sentences:
12
+ - "ম্যাচটা সিকান্দার রাজারই ছিল। অন্তত রান তাড়ায় নামা শ্রীলঙ্কার ইনিংসের ১৫ ওভার পর্যন্ত অবশ্যই। কিন্তু ব্যাটে বলে দারুণ খেলা জিম্বাবুয়ে অধিনায়ককে হাসতে দিলেন না শ্রীলঙ্কার দুই অভিজ্ঞ ক্রিকেটার। অ্যাঞ্জেলো ম্যাথুস-দাসুন শানাকার সপ্তম উইকেট জুটি ম্যাচ বের করে নেয় জিম্বাবুয়ের নাগাল থেকে। ম্যাথুস অবশ্য দলকে জিতিয়ে ফিরতে পারেননি। তিনি যখন আউট হন, ২ বলে ৬ রান দরকার শ্রীলঙ্কার। দুষ্মন্ত চামিরা ৪ ও ২ রান নিয়ে শেষ বলে গড়ানো ম্যাচে জয় এনে দলকে। "
13
+ - "অক্ষর প্যাট���ল অর্শদীপ সিংয়ের দারুণ বোলিংয়ের পর যশস্বী জয়সোয়াল ও শিবম দুবের জোড়া অর্ধশতকে ইন্দোরে সহজ জয়ে এক ম্যাচ বাকি থাকতেই সিরিজ জিতেছে ভারত। ইন্দোরে তিনে নামা গুলবদিন নাইবের ৩৫ বলে ৫৭ রানের ইনিংসে আফগানিস্তান তুলেছিল ১৭২ রান, কিন্তু ভারত সেটি পেরিয়ে গেছে ২৬ বল ও ৬ উইকেট বাকি রেখেই।"
14
+ - "এদিন প্রথম থেকে আক্রমণ বল দখলে এগিয়ে ছিল মিসরই। প্রতিযোগিতার সবচেয়ে সফল দলটির এগিয়ে যেতে সময় লাগে মাত্র ২ মিনিট। বাঁ পাশ থেকে আসা ক্রসে সালাহ চেষ্টা করেও ঠিকঠাক সংযোগ ঘটাতে পারেননি। তবে তাঁর পায়ের ছোঁয়ায় বল আসে মোস্তফা মোহাম্মদের কাছে। ভুল করেননি এই ফরোয়ার্ড। দারুণ ফিনিশিংয়ে গোল করে এগিয়ে দেন দলকে।"
15
+ - "আবহাওয়া বেলুনটি ঢাকা থেকে ১২০ কিলোমিটার দূরে কুমিল্লায় অক্ষত অবস্থায় অবতরণ করে। আবহাওয়া পর্যবেক্ষণ বেলুনটি বায়ুমণ্ডলের বিভিন্ন উচ্চতায় তাপমাত্রা, আর্দ্রতা, বাতাসের গতি এবং বায়ুমণ্ডলের অবস্থা পরিমাপ করার জন্য তৈরি করা হয়েছে। এক সংবাদ বিজ্ঞপ্তিতে এ তথ্য জানিয়েছে এআইইউবি।"
16
+ example_title: "Bengali News Example"
17
+
18
+
19
+ # widget:
20
+ # - source_sentence: "That is a happy person"
21
+ # sentences:
22
+ # - "That is a happy dog"
23
+ # - "That is a very happy person"
24
+ # - "Today is a sunny day"
25
+ # example_title: "Happy"
 
 
 
 
 
 
 
 
 
 
26
  language:
27
  - bn
 
 
 
28
  ---
29
 
 
30
 
31
+ # `retrival-mpnet-bn`
32
+
33
+ This is a [sentence-transformers](https://www.SBERT.net) model: It maps sentences & paragraphs to a 768 dimensional dense vector space and can be used for tasks like **clustering** or **semantic search**.
34
 
35
  <!--- Describe your model here -->
36
 
37
+ ## Model Details
38
+
39
+ - Model name: retrival-mpnet-bn
40
+ - Model version: 1.0
41
+ - Architecture: Sentence Transformer
42
+ - Language: Multilingual ( fine-tuned for Bengali Language)
43
+
44
+
45
+ ## Training
46
+
47
+ The model was fine-tuned using **Multilingual Knowledge Distillation** method. We selected [multi-qa-mpnet-base-cos-v1](https://huggingface.co/sentence-transformers/multi-qa-mpnet-base-cos-v1) model and added a `mean tokens pooling` layer as the teacher model
48
+ ```
49
+ from sentence_transformers import models, SentenceTransformer
50
+
51
+ mpnet_model = models.Transformer('sentence-transformers/multi-qa-mpnet-base-cos-v1')
52
+
53
+ pooling_model = models.Pooling(mpnet_model.get_word_embedding_dimension(),
54
+ pooling_mode_mean_tokens=True,
55
+ pooling_mode_cls_token=False,
56
+ pooling_mode_max_tokens=False)
57
+
58
+ teacher = SentenceTransformer(modules=[mpnet_model, pooling_model])
59
+ ```
60
+ and `xlm-roberta-large` as the student model hence it's a multilingual model and works relatively well for Bengali .
61
+
62
+ ![image](https://i.ibb.co/8Xrgnfr/sentence-transformer-model.png)
63
+
64
+ ## Intended Use:
65
+ Our model is intented to be used for semantic search: It encodes queries / questions and text paragraphs in a dense vector space. It finds relevant documents for the given passages.
66
+
67
+ Note that there is a limit of 512 word pieces: Text longer than that will be truncated. Further note that the model was just trained on input text up to 250 word pieces. It might not work well for longer text.
68
+
69
+ - **Primary Use Case:**
70
+ - **Open-domain question answering:** Answering natural language questions using a large text corpus.
71
+ - **Document retrieval:** Finding relevant documents based on user queries.
72
+ - **Information retrieval tasks:** Building other information retrieval systems that require efficient passage retrieval
73
+ - **Potential Use Cases:** Semantic Similarity, Recommendation systems, Chatbot systems , FAQ system
74
+
75
+ ## Usage
76
+
77
+ ### Using Sentence-Transformers
78
 
79
  Using this model becomes easy when you have [sentence-transformers](https://www.SBERT.net) installed:
80
 
 
85
  Then you can use the model like this:
86
 
87
  ```python
88
+ from sentence_transformers import SentenceTransformer, util
89
+
90
+ query = "আফগানিস্তান কত রান করেছিল"
91
+ docs = ["ম্যাচটা সিকান্দার রাজারই ছিল। অন্তত রান তাড়ায় নামা শ্রীলঙ্কার ইনিংসের ১৫ ওভার পর্যন্ত অবশ্যই। কিন্তু ব্যাটে বলে দারুণ খেলা জিম্বাবুয়ে অধিনায়ককে হাসতে দিলেন না শ্রীলঙ্কার দুই অভিজ্ঞ ক্রিকেটার। অ্যাঞ্জেলো ম্যাথুস-দাসুন শানাকার সপ্তম উইকেট জুটি ম্যাচ বের করে নেয় জিম্বাবুয়ের নাগাল থেকে। ম্যাথুস অবশ্য দলকে জিতিয়ে ফিরতে পারেননি। তিনি যখন আউট হন, ২ বলে ৬ রান দরকার শ্রীলঙ্কার। দুষ্মন্ত চামিরা ৪ ও ২ রান নিয়ে শেষ বলে গড়ানো ম্যাচে জয় এনে দলকে। ",
92
+ "অক্ষর প্যাটেল ও অর্শদীপ সিংয়ের দারুণ বোলিংয়ের পর যশস্বী জয়সোয়াল ও শিবম দুবের জোড়া অর্ধশতকে ইন্দোরে সহজ জয়ে এক ম্যাচ বাকি থাকতেই সিরিজ জিতেছে ভারত। ইন্দোরে তিনে নামা গুলবদিন নাইবের ৩৫ বলে ৫৭ রানের ইনিংসে আফগানিস্তান তুলেছিল ১৭২ রান, কিন্তু ভারত সেটি পেরিয়ে গেছে ২৬ বল ও ৬ উইকেট বাকি রেখেই।",
93
+ "এদিন প্রথম থেকে আক্রমণ ও বল দখলে এগিয়ে ছিল মিসরই। প্রতিযোগিতার সবচেয়ে সফল দলটির এগিয়ে যেতে সময় লাগে মাত্র ২ মিনিট। বাঁ পাশ থেকে আসা ক্রসে সালাহ চেষ্টা করেও ঠিকঠাক সংযোগ ঘটাতে পারেননি। তবে তাঁর পায়ের ছোঁয়ায় বল আসে মোস্তফা মোহাম্মদের কাছে। ভুল করেননি এই ফরোয়ার্ড। দারুণ ফিনিশিংয়ে গোল করে এগিয়ে দেন দলকে।"]
94
+ # Load the model
95
+ model = SentenceTransformer('afschowdhury/retrival-mpnet-bn')
96
+ # Encode the query and documents
97
+ query_emb = model.encode(query)
98
+ doc_emb = model.encode(docs)
99
+
100
+ #Compute dot score between query and all document embeddings
101
+ scores = util.dot_score(query_emb, doc_emb)[0].cpu().tolist()
102
+
103
+ #Combine docs & scores
104
+ doc_score_pairs = list(zip(docs, scores))
105
+
106
+ #Sort by decreasing score
107
+ doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)
108
+
109
+ #Output passages & scores
110
+ for doc, score in doc_score_pairs:
111
+ print(score, doc)
112
  ```
113
 
114
+ ### Using HuggingFace Transformers
115
 
 
 
116
  Without [sentence-transformers](https://www.SBERT.net), you can use the model like this: First, you pass your input through the transformer model, then you have to apply the right pooling-operation on-top of the contextualized word embeddings.
117
 
118
  ```python
119
  from transformers import AutoTokenizer, AutoModel
120
  import torch
121
+ import torch.nn.functional as F
122
 
123
+ #Mean Pooling - Take average of all tokens
 
124
  def mean_pooling(model_output, attention_mask):
125
+ token_embeddings = model_output.last_hidden_state #First element of model_output contains all token embeddings
126
  input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
127
  return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)
128
 
129
 
130
+ #Encode text
131
+ def encode(texts):
132
+ # Tokenize sentences
133
+ encoded_input = tokenizer(texts, padding=True, truncation=True, return_tensors='pt')
 
 
 
 
 
134
 
135
+ # Compute token embeddings
136
+ with torch.no_grad():
137
+ model_output = model(**encoded_input, return_dict=True)
138
 
139
+ # Perform pooling
140
+ embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
141
 
142
+ # Normalize embeddings
143
+ embeddings = F.normalize(embeddings, p=2, dim=1)
144
+
145
+ return embeddings
146
 
147
 
148
+ # Sentences we want sentence embeddings for
149
+ query = "আফগানিস্তান কত রান করেছিল"
150
+ docs = ["ম্যাচটা সিকান্দার রাজারই ছিল। অন্তত রান তাড়ায় নামা শ্রীলঙ্কার ইনিংসের ১৫ ওভার পর্যন্ত অবশ্যই। কিন্তু ব্যাটে বলে দারুণ খেলা জিম্বাবুয়ে অধিনায়ককে হাসতে দিলেন না শ্রীলঙ্কার দুই অভিজ্ঞ ক্রিকেটার। অ্যাঞ্জেলো ম্যাথুস-দাসুন শানাকার সপ্তম উইকেট জুটি ম্যাচ বের করে নেয় জিম্বাবুয়ের নাগাল থেকে। ম্যাথুস অবশ্য দলকে জিতিয়ে ফিরতে পারেননি। তিনি যখন আউট হন, ২ বলে ৬ রান দরকার শ্রীলঙ্কার। দুষ্মন্ত চামিরা ৪ ও ২ রান নিয়ে শেষ বলে গড়ানো ম্যাচে জয় এনে দলকে। ",
151
+ "অক্ষর প্যাটেল ও অর্শদীপ সিংয়ের দারুণ বোলিংয়ের পর যশস্বী জয়সোয়াল ও শিবম দুবের জোড়া অর্ধশতকে ইন্দোরে সহজ জয়ে এক ম্যাচ বাকি থাকতেই সিরিজ জিতেছে ভারত। ইন্দোরে তিনে নামা গুলবদিন নাইবের ৩৫ বলে ৫৭ রানের ইনিংসে আফগানিস্তান তুলেছিল ১৭২ রান, কিন্তু ভারত সেটি পেরিয়ে গেছে ২৬ বল ও ৬ উইকেট বাকি রেখেই।",
152
+ "এদিন প্রথম থেকে আক্রমণ ও বল দখলে এগিয়ে ছিল মিসরই। প্রতিযোগিতার সবচেয়ে সফল দলটির এগিয়ে যেতে সময় লাগে মাত্র ২ মিনিট। বাঁ পাশ থেকে আসা ক্রসে সালাহ চেষ্টা করেও ঠিকঠাক সংযোগ ঘটাতে পারেননি। তবে তাঁর পায়ের ছোঁয়ায় বল আসে মোস্তফা মোহাম্মদের কাছে। ভুল করেননি এই ফরোয়ার্ড। দারুণ ফিনিশিংয়ে গোল করে এগিয়ে দেন দলকে।"]
153
 
154
+ # Load model from HuggingFace Hub
155
+ tokenizer = AutoTokenizer.from_pretrained("afschowdhury/retrival-mpnet-bn")
156
+ model = AutoModel.from_pretrained("afschowdhury/retrival-mpnet-bn")
157
 
158
+ #Encode query and docs
159
+ query_emb = encode(query)
160
+ doc_emb = encode(docs)
161
 
162
+ #Compute dot score between query and all document embeddings
163
+ scores = torch.mm(query_emb, doc_emb.transpose(0, 1))[0].cpu().tolist()
164
 
165
+ #Combine docs & scores
166
+ doc_score_pairs = list(zip(docs, scores))
167
 
168
+ #Sort by decreasing score
169
+ doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)
170
 
171
+ #Output passages & scores
172
+ for doc, score in doc_score_pairs:
173
+ print(score, doc)
174
 
 
 
 
175
  ```
176
 
177
+ ## Technical Details
178
+ In the following some technical details how this model must be used:
179
+ | Setting | Value |
180
+ | ------------------------------ | ------------------------------------------- |
181
+ | Dimensions | 768 |
182
+ | Produces normalized embeddings | No |
183
+ | Pooling-Method | Mean pooling |
184
+ | Suitable score functions | dot-product (`util.dot_score`), cosine-similarity (`util.cos_sim`), or euclidean distance |
185
 
186
+ ----
187
+ **Note:** When loaded with sentence-transformers, this model doesn;t produces normalized embeddings like it's base model as while training , we didn't added the normalzed layer in student model's architecture. In that case, dot-product and cosine-similarity aren't equivalent. However, for retrieval applications, the performance difference is negligible. For similarity search, we recommend to use cosine-similarity as score function.
188
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
 
190
+ <!-- write a background section -->
191
+
192
+ <!-- write about training data and training procedure and losses -->
193
 
194
  ## Full Model Architecture
195
+
196
  ```
197
  SentenceTransformer(
198
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: XLMRobertaModel
 
200
  )
201
  ```
202
 
203
+ ### Point of Contact
204
+ **Asif Faisal Chowdhury**
205
+ E-mail: [afschowdhury@gmail.com](mailto:afschowdhury@gmail.com) | Linked-in: [afschowdhury](https://www.linkedin.com/in/afschowdhury)