NLP_Lecture_8-_Search_Engines_and_Sentiment
السلام عليكم دي المحاضره التامنه ان شاء الله في ال natural language processing. احنا خدنا المره اللي فاتت زي ما قلنا ال text classification وال text clustering. النهارده هناخد two applications تانيين لل NLP. ال search engines وال sentiment analysis.طيب هي ال search engine هي ال application او التطبيق اللي بينفذ ايه؟ ال science بتاع ال information retrieval.
فهي احد applications ال NLP ال most common يعني تخيل انت بقى تبقى عايش كده واحنا كنا زمان عايشين كده من غير search engine. كان تخيل ان انت حياتك بقى دلوقتي في الرفاهيه اللي انت فيها دي مفيش search engine هتعمل ايه؟ هتحتاس لا هتعرف تذاكر ولا تعرف تعمل assignment ولا تعرف تتفرج على مسلسلات ولا تعرف تعمل اي حاجه. فال search engine من اهم ال applications اللي حاليا شغاله وكل ماده بتتطور يعني لو لو حد عصر ال search engine زمان ال search كان بيبقى ضعيف جدا او ال retrieval بيبقى ضعيف دلوقتي بيبقى فيها features كتيره
بتسهل على الـ user experience بتاعته فالـ search engine هي software program that helps people find the information they are looking for online using keywords or phrases أهم الخصائص الـ properties اللي بتميز الـ search engine أو اللي هي لازم تكون موجودة في search engine عشان أقول عليه إن هو reliable تلات حاجات أول حاجة إن هو
يـ retrieve ال relevant results. إن أنا لما بـ search على حاجة يجيب لي documents أو websites ليها علاقة فعلًا باللي أنا بـ search فيه، مش بيجيب لي حاجات بتتكلم في حاجة تانية، لإلا مش هدخل عليه أ search تاني.
تاني حاجة عكسها بقى، بـ neglect ال irrelevant results. طب هو إيه الفرق؟ ما طالما جاب لي retrieve ال relevant يبقى هو عمل neglection؟ لأ ممكن يجيب لي ده وده. فهو يـ retrieve ال relevant دي حاجة عشان كده دي precision و recall الفرق بين ال factors دول.
إنه يـ retrieve ال relevant ده حاجة وإن هو ما يجيبش ال irrelevant دي حاجة تانية.
وأهم حاجة كمان إن هو يكون fast، يعني ما أعملش ال query ما أكتبش ال query وألاقي بعد كده إن أنا قاعدة خمس دقايق مستنية يجيب لي results. وده makes sense إن هو ممكن ياخد وقت عشان هو بيدور مثلًا في ال online بالذات إنه بيعمل crawling لل websites كتيرة جدًا ملايين ال website.
فهو عشان يبقى search في ال process بتاعته بيعمل pre-processing لل websites دي إنها بيعمل لها indexing بحيث أما يجي يعمل search بعد كده يبقى سهل على طول إن هو ي retrieve ال relevant.
طيب أشهر ال search engines طبعًا لوحده على جنب كده Google. وده ليه based على ال reference اللي أنا حاطاه هنا ليه 82% من ال market share في في ال search engine.
قبل كده قبل Google كان في Yahoo و ask.com و AltaVista. دول برضه أشهر تلاتة search engines قبل Google كانوا موجودين. Google ده طلع في 2007 فحديث يعني مش مش حاجة قديمة. وفي بقى دلوقتي كمان في Bing و AOL اللي هي America Online و Yandex. وفي websites كتيرة أو search engines كتيرة بتستخدم. ال AOL مثلًا اللي هو في USA و Canada وكده ده 0.4% market share. ال Bing 5%. ال Yahoo.
7%وبقية ال percentage بقى على بقية ال search engines المختلفة.
طب عندي تلاتة أو عندي عندي تلاتة techniques بس قبل ما أتكلم عليهم إيه ال challenges برضه اللي بتقابلني في ال search engine. ال search عمومًا وأنا لما باجي أ search في مثلًا في Microsoft Word عندي document ب search فيه.
أعمل إيه؟ بدور على الكلمة بيعمل ال keyword matching. إن أنا الكلمة دي بيلاقي بيدور عليها بالظبط. لو عاملة فيها spelling mistake أو لو مثلًا ناسية فيها حرف أو كده مش هيلاقيها. فما هواش ده أحسن طريقة لل matching يعني أو لل searching. لإن أنا ال keyword matching ده مش هيطلع لي ال results مظبوطة لسببين. إن أنا لما أجي أ search على Stanford University أنا بدور على جامعة اسمها Stanford.
بدور على جامعة عين شمس فأنا لو بعمل keyword matching هيرجع لي ال documents أو ال websites اللي بتتكلم على منطقة عين شمس مثلًا كمان. هو بياخد exact match فده طبعًا هيجيب لي irrelevant documents وفي نفس الوقت في relevant documents مش هتيجي.طيب حاجة زي Stanford University ممكن يجيب لي document فيه جملة "I went to a university in Stanford". دي جامعة ما ما قلتش اسمها موجودة في Stan.
دي غير دي فده كده irrelevant بالنسبة لي. من ال challenges اللي بتقابلني في ال search engine ال auto-correction وده موجود recently ما كانش موجود قبل كده حتى في Google يعني. إيه ال auto-correction؟ إن هو أنا بكتب لو في spelling mistake كتبت بسرعة مثلًا أو أنا ما عنديش علم كافي باللغة إن أنا ال spelling بتاعي مش مظبوط.
فهو بيقول لي "did you mean" كذا بعد ما أ search هو هي search على اللي أنا كاتباه بس هو هيقول لي suggestion يعني أنت تقصد تدور على ال query بالشكل ده ال spelling بتاعه كذا. فدي من ال challenges أو ال features اللي اتضافت على ال search engines. ال auto-complete كمان ده برضه حاجة recent ما هياش قديمة  أوي. إيه ال auto-complete؟ إن أنا بكتب ببدأ أكتب ال query بتاعي.
وهو بيتوقع الباقي. يتوقع الباقي based على كذا حاجة. أول حاجة على إيه ال trend اللي الناس كلها بت search عليه دلوقتي؟ لو أنا ب search على مثلًا هدف محمد صلاح اليوم أول ما أكتب هدف هلاقي جاب لي أنت عايز تقصد هدف محمد صلاح أصل كتير أوي في اللي حواليك أو في ال world wide إن هم بيدوروا على ال query ده. أنت عايز نفس ال query؟ فده ده ال trend ده أول حاجة في ال auto-complete.
تاني حاجة based على ال profile بتاعك. فأنت حد متابع مثلًا كورة ولا حد بتتكلم على هدف بتاع أهداف مثلًا عامة أهداف مش عارف إيه فـ based على ال profile بتاعك برضه بيبقى customized ال search experience بتاعتك. فال user profile وال interests بتاعته برضه بتختلف مع مع ال results بتاعت ال searching. يعني مثلًا حد بيتكلم في الكورة بيكتب بي search على برشلونة.
هيجيب له نادي برشلونة والفريق واللاعيبة ومش عارف إيه واستاد Camp Nou والكلام ده كله. حد تاني متخصص في السياحة أو بيكتب برشلونة هيجيب له results عن السياحة وال tourist interests في برشلونة والقصة دي. فـ based على ال interest بتاعتك كمان غير ال trend إن هو بيرجع لك ال retrieved document.
ال exact match اللي هو ده نتيجة ال keyword matching إن أنا أنا عايزة exact match وده دايمًا مش بيحصل في ال searching يعني. مش هلاقي ال exact match للكلمات بتاعتي بالظبط في ال website. ممكن ألاقي كلمة بديلة ليها. يعني بتكلم على هدف محمد صلاح هلاقي goal محمد صلاح مثلًا. أو يعني هلاقي كلمات تانية مش شرط يكون ال retrieved يكون نفس الكلمات بالظبط.
من ضمن ال challenges وده في أي NLP application أي حاجة بتتكلم على language سواء natural language أو حتى programming language لازم يبقى في جزء ال ambiguity ده. إيه ال ambiguous words؟ زي ما اتفقنا قبل كده من ال challenges اللي بتقابلني ولغاية دلوقتي ملهاش 100% solution يعني إن الكلمات اللي بتعني أكتر من حاجة، يعني أنا ب search على حاجة الكلمة دي أو الجملة دي سواء على مستوى الكلمة أو على مستوى الجملة ليها أكتر من معنى، فأنت تقصد بت search عليها بالمعنى ده ولا بالمعنى ده ولا .
ب search عليها بالمعنى ده. location specific queries زي إيه؟ إن أنا ب search على حاجة ال retrieved معتمد على ال location بتاعي. يعني أما ب search على حاجة وأنا في مصر غير لما ب search على حاجة وأنا في أمريكا غير لما ب search على حاجة يعني طبعًا specific queries مش أي حاجة يعني لما أقول هدف محمد صلاح خلاص هيجيب لي كل.
لكن مثلا أبسط حاجة لما أنا بقول "restaurants near me". هيجيب لي أنا حتى مش على مستوى مصر بقى وأمريكا، لأ لو أنت في العباسية هيجيب لك retrieved results غير لو أنت في مصر الجديدة غير لو أنت في التجمع غير لو أنت في أي حتة، ده ال location specific. لو أنا بدور على location معين أو في حاجات search queries ممكن تعتمد على المنطقة بتاعتك.
based على ال culture بتاعتك. أنت بت search على حاجة وأنت في مصر فال retrieved في ال culture دي غير ال retrieved وأنت في أمريكا غير وأنت في ألمانيا وغير وأنت في كده. مثلا بتدور على "president of the country"، الكلمة عامة، طب أنهي country؟ فهو هيرجع لك مين؟ ال president بتاع ال country اللي هو أنت قاعد فيها.
ده ده هيبقى ال most relevant بالنسبة لك، لو أنت في بلد تانية يبقى هيرجع لك president تاني وهكذا. طيب بيعرف منين ال location بتاعك؟ لو أنت بت search من ال mobile وفاتح ال location تمام، لو أنت مش فاتح ال location بيعرف منين؟
.من ال إيه؟ من الساعة. لأ مش شرط ما الساعة في بلاد كتيرة common على خط الطول بتاع الساعة.
من ال IP address. ال IP address كل بلد ليها range of IP address مختلف، يعني ممكن من ال IP address ده أعرف أنت في بلد إيه. وده اللي بيشتغل عليه زمان حتى عشان يعرفوا ال user ده أو ال online user ده من بلد إيه بيعرفوا من ال IP قبل ما كان يبقى في ال location وال GPS.
الكلام ده. طب إيه الطرق اللي عندي المختلفة اللي أنا بعمل بيها searching؟ عندي تلات طرق، حاجة اسمها by-word indexes، حاجة اسمها positional indexes، وحاجة اسمها ranked retrieval. طيب هنمسك واحدة واحدة كده ال by-word indexes من اسمها كده بت search كلمتين كلمتين في ال query. فأنا لو بدور على على query "Stanford University Palo Alto" في مدينة Palo Alto.
في منطقة Palo Alto. هياخد Stanford University مع بعض يـ retrieve ال documents بتاعتها، ياخد University Palo مع بعض، ياخد Palo Alto مع بعض، ويعمل anding لل retrieved documents يجيب ال common ما بينهم. طبعًا يعني هي طريقة سهلة ولكن فيها عيوب كتير، إيه هي؟ أول عيب مين يقول لي؟
ال computation complexity كبيرة جدًا بتاخد time كبير جدًا، very slow technique إن هو يقعد يـ retrieve لو أنا بقى ب search على query كبير ياخد كلمتين كلمتين يقعد يـ retrieve, يـ retrieve, يـ and، الموضوع بياخد time كبير جدًا، فـ slow technique. غير كده حاجة اسمها ال index blow-up إن هو.
infeasible لو هو requiring very big dictionaries عشان يعرف يعمل anding لكل الكلام ده محتاج corpus كبيرة ومحتاج dictionary كبيرة. وبيرجع false positives كتيرة وبـ neglect ال irrelevant documents لإن ال anding دي إن لازم يكون عندي Stanford University وعندي university Palo ، طب أنا ممكن document أو website بيتكلم على Stanford University ما فيهوش كلمة Palo Alto خالص، فمش هيبقى retrieved بالنسبة لي.
فهيبقى عندي false positives كتير.طيب الطريقة التانية اللي هي ال positional indexes.
Positional indexes بتبقى more accurate. دي شبه شوية ال IDF أو ال inverted index اللي هو بيعمل إيه؟ بيمسك ال term يعني ده طبعًا في ال pre-processing بيمسك term by term في ال corpus بتاعتي ويكتب قصاده هو موجود في أنهي documents في أنهي positions. ده ال positional index.
فال term أهو بيتكتب قدامه عدد تكرار الكلمة في ال corpus كلها وبعد كده هو موجود في document 1 في position 1 و 2 و 3 و 4. وهو موجود في document 2 في position كذا كذا كذا . verb to be مثلًا في ال corpus كان موجود 993,427 مرة. في document 1 موجود في 7 و 18 و 33 و 72 و 86 و 231. ده ال indexes الموجود فيها في document 1.
ال document رقم ال document اللي هو بالأحمر وعليه نقطتين والأرقام اللي قدامه بينها comma دي ال indexes بتاعتها. document 2 موجود في 3 و149. document 4 موجود في 17 ,191 ,291 وهكذا. document 5 موجود في 363 و367.
طيب حاجة زي كده تفيدني في إيه في ال searching؟
لو أنا بدور مثلا في query 'to be or not to be' . هستفيد من ال indexes دي في إيه؟
أولًا أنا عايزة documents يكون في كلمة 'be' مرتين في positions الفرق بينهم كام؟ أربعة.
ليه لإن في الجملة دي الفرق بين 'be' دي و'be' دي أربعة.
طيب هل أنا هنا عندي two indexes فرق بينهم أربعة؟ لأ.هل هنا فرق أربعة؟ لأ. هل هنا فرق أربعة؟أه، من 430 لكام؟ ل 434 . يبقى أنا candidate عندي إنهم document 4 في ال position ده. و document 5 كمان عندي 363 ل 367 فـ candidate إن هو يكون فيه.
تمام؟ بس بعد شوية هستبعد five هقول لكم ليه.فأنا هنا وأنا ب search إن أنا عايزة 'be' مرتين فرق بينهم أربعة ده موجود في four و five. يبقى أنا ه retrieve مبدئيًا four و five.
إيه تاني؟ لو عندي كمان كلمة 'to'. أنا عايزة 'to be or not to be' فأنا همسك كل واحدة منهم أشوف ال indexes بتاعتها وأعمل برضه ال anding ما بينهم.
كلمة 'to' موجودة في document 2 في ال positions دي، في four في ال positions دي، في seven في ال positions دي.وكلمة 'be' أو verb to be يعني موجود في one و four و five وهكذا.طيب هنا 'to' برضه نفس الكلام عايزة 'to' مرتين في ال document يكون ال index ما بينهم كام؟ أربعة برضه.هل في document 2 في مرتين بينهم أربعة؟ لأ. هنا في مرتين بينهم أربعة؟
أه، من 429 ل 433.
document 7 موجود فيه فرق أربعة؟ لأ ده فرق هنا 10 وهنا بعيدة خالص.
طب verb to be برضه ال suggested إن هو اللي هي دي. حتى هتلاقي ال index قريبين من بعض لإن هم ورا بعض في ال document.
طيب أنا هنا استبعدت five. five في ال slide اللي فاتت كان موجود verb to be في فرق بينهم أربعة بس 'to' مش موجودة في five أصلًا. هيبقى الجملة دي مش موجودة في five عشان كده استبعدت document five. يبقى ال common ما بين الاتنين document four. يبقى أنا ه retrieve document four. ده ال positional index.
يعني إيه نفس الحاجة؟ يعني من فوق لتحت مع حاجتين مختلفتين؟ أه هنا هم نفس ال corpus بس هنا كلمة 'to' موجودة فين وكلمة 'be' موجودة فين.
أنا بدور على 'to be or not to be' فأنا هستغل ال indexes في إن أنا بدور على 'be'.
موجودة مرتين في ال query فرق بينها أربعة و 'to' موجودة مرتين في ال query فرق بينها أربعة. إيه ال document ال common اللي بيحقق الشرطين دول؟ document four لإن 'to' موجودة مرتين فرق بينهم أربعة و 'be' موجودة في document four برضه مرتين فرق بينهم أربعة. وال slide اللي قبلها كان 'be' موجودة في five برضه في document five فرق بينها أربعة.
بس استبعدتها لإن 'to' مش موجودة في five أصلًا.فيبقى الجملة على بعض أنا بدور على ال query 'to be or not to be' فكلمة 'to' مش موجودة في five يبقى 'be' موجودة مرتين في جملة تانية.يبقى أنا مش ه retrieve document five. فهمت قصدي؟
طيب إيه عيوب حاجة زي كده؟ ال boolean retrieval. Boolean retrieval يعني يا برجع zero يا one. يا إما مش موجودة خالص يا إما برجع documents كتيرة .
فده من عيوب الطريقة ال index.طيب نيجي بقى لأحسن طريقة اللي هي بتستخدم حاليًا اللي هي ranked retrieval search. بي retrieve ويعمل لها ranking ب weights بقى مختلفة.فال retrieved documents should be ranked and sorted from most relevant, اللي هي page 1 في Google مثلا, to least, اللي هي page 2+. حد عمره راح بص على page 2 وال pages الجميلة اللي في Google دي؟ هتلاقي ممكن فيها حاجات relevant بس عمر ما حد دخل علي.
هو بيرتبه من ال most relevant بالنسبة لك هو في ال page 1. لو أنت ما لقيتش اللي أنت عايزه بقى يروح ل page 2 و 3 و 4 وهكذا.فبيبقى في scoring technique هو ده اللي بيعمل ranking لل retrieved results بتاعة ال query. وال scoring ده ما بين 0 و 1. طب إيه ال most common scoring technique اللي بيستخدم؟ اللي هو حاجة اسمها Jaccard coefficient.
ده بيعمل إيه؟ ال Jaccard similarity دي بتقيس ال similarity ما بين two documents أو ال document وال query.فال Jaccard similarity ما بين A و B, ما بين A و B هتبقى تتحسب إزاي؟ ال intersection ما بين A و B على ال union ما بين A و B. بمعنى إيه intersection و union؟
عدد الكلمات المشتركة في ال two documents دول على عدد الكلمات ال total في ال two documents.يعني لو عندي ما بين A و B يبقى A intersection B على A union B. لو ما بين A ونفسها طبعًا هتبقى 1. لو A و B disjoint يعني two documents مختلفين عن بعض تمامًا مفيش أي كلمة common هيبقى 0.
جايز هنا A و B two documents مش لازم يكونوا نفس ال size يعني هو هنا بيعتمد على عدد تكرار الكلمات. وال value اللي بتطلع لي ما بين 0 . zero لو هم disjoint خالص, one لو هم identical.
طيب For example, لو عندي corpus, أدي document A و document B. document A فيها جملة Spain is a beautiful country for tourism.
document B بيكلم إن Picasso from Spain. ال query بتاعي بدور على 'travel to Spain'.طيب أحسب ال Jaccard coefficient أو Jaccard similarity ما بين ال A وال Q. أنا عايزة أشوف ال query ده أقرب ل A ولا أقرب ل B؟ أجيب له A الأول ولا أجيب له B الأول؟
طيب ما بين ال A وال Q كام؟ إيه الكلمات ال common ما بين ال A وال query؟
كلمة Spain كلمة واحدة يبقى 1. يبقى ال intersection 1. over total الكلمات كام كلمة؟ 1 2 3 4 5 6 7 8 9 10. طب ليه عملناها over 9؟شلت ال redundant word اللي هي Spain.
يبقى ال unique ال denominator بيبقى بيتكلم على ال total unique words في ال two documents. يبقى 1/9.
طب وما بين ال B وال Q؟ برضه one common اللي هي Spain. وعندي 3 و 3 ستة شلت منهم ال common خمسة. يبقى 1 على 5.مين هنا هيدي value أكبر؟ 1 على 9 ولا 1 على 5؟
ال denominator كل اما قل كل ما ال coefficient نفسه أو ال ratio زادت. فيبقى هنا مين اللي أقرب لل query؟ B.
ده حسب ال Jaccard similarity أو coefficient. طب كمعنى بقى يعني أنت لو بت search على 'travel to Spain' منتظر يجي لك إيه الأول ولا B الأول؟A الأول لأن أنا عايز أشوف ال touristic, مثلا, يعني ال touristic places مثلا في Spain. ما يهمنيش إن Picasso from Spain وأنا بدور على إن أنا travel to Spain.
فهي ما هياش بتبقى accurate أوي لإن إيه عيوبه؟ هو بيعتمد على هو مجرد على عدد الكلمات فده اللي خلى ال value بتاعته أكبر إن عدد كلمات B أقل.فهو هنا بعدد كلمات ال document.فهو هنا مش ب consider ال term frequency لأن شيلنا ال redundant زي ما قلنا.
وبيعتمد على ال length of sentence لو الجملة بتاعتي أو ال document بتاعي صغير يبقى ده هيبقى retrieved ده طبعًا missed .طب عشان أ evaluate أي search engine في كذا factor, أول حاجة ال speed. في حاجتين لل speed أو ال time. ال speed هنا how it handle the input documents corpus الموضوع إن هو يعمل لها pre-processing ويجهزها إنه ي search بسرعة.
وده ال time بتاع ال processing ال query, ال retrieval بقى نفسه بياخد قد إيه. فال speed بتاعته إن هو ي handle ال document corpus. ده ال speed. وال time هنا مقصود بيها ال time بتاع ال retrieval. ال corpus نفسها يعني أما يبقى search engine بي search في 100 documents غير لما يكون search engine بي search في 2000 document. فبرضه ال number of documents أو ال corpus نفسها ال size بتاع ال corpus بتفرق معايا في ال evaluation لل search engine.
ال display بتتعامل إزاي مع ال retrieval وال complicated information. ال user interaction ده مهم جدًا ودي برضه حاجة حديثة. ليه؟ لإن أنا دلوقتي لو اعتمدت على Jaccard coefficient رجعت له الأول B وبعدين A. هو لقى B بيتكلم عن Picasso وهو مش عايز ده فدخل على A الأول. فالمفترض أنا ك search engine أبقى smart enough إن أنا أتعامل مع ال interaction بتاع ال user يعني أنا هو دخل على مش هو بس كذا حد أما عمله search على ال query ده لقى إن هو.
ال document التاني more relevant لل document الأولاني يبقى أنا أعدل نفسي وال retrieval بعد كده يرجع له ال document التاني الأول. فيبقى بيعتمد على ال user interactions غير بقى طبعًا ال likes وال search وال user profile. اللي هو بيعتمد عليه. طبعًا احنا كنا اتكلمنا على الحتة دي قبل كده أفكركم بيها، ال main factors اللي بتعامل بيها في ال evaluation في ال search engine أو في ال information retrieval عمومًا ال precision وال recall وال F1-score. ال precision اللي هي ال intersection ما بين.
relevant documents وال retrieved documents على total ال retrieved. وال recall اللي هي ال relevant intersection لل retrieved على total ال relevant. يعني ال numerator واحد, ال denominator هو اللي بيختلف. وال F1-score اللي هو بيجيب يعني حاجة شبه ال average أو اللي هي ال harmonic measure ما بينهم يعني, 2 recall في precision على recall + precision.
وممكن أجيبها بال confusion matrix لو أنا شغالة machine learning أو كده وحسبت ال confusion matrix ممكن تتجاب بالطريقة دي. true positive على true positive + false positive. وال recall true positive على true positive + false negative.
ده ال code ال search engine يعني شوية code Python ممكن نعمل له skip.
و الحابب يبقى يقرأه يتعامل معاها في البيت.هنتكلم بعد كده عن ال sentiment and sentiment analysis and binary naïve Bayes. برضه هنستخدم ال naïve Bayes عشان نعمل sentiment analysis. إيه هو ال sentiment analysis؟
هنا أنا عاملاها تلاتة classes: positive و negative و neutral. ممكن يبقى positive و negative بس. ممكن يبقى خمسة classes مش بس positive و negative ممكن يبقى في sentiments كتيرة مثلا angry, مثلا calm, أي بقى حاجة من ال feelings دي ممكن حسب ال application بتاعتي بتطلع ال feelings المختلفة الموجودة في الإيه؟ في ال .
text. طيب الجزء ده ال reference بتاعه متاخد من NLP course بتاع Stanford University. هنوقف بس للآذان.طيب ال sentiment analysis زي ما قلنا إن أنا مثلا ممكن أعمل positive أو negative movie review. movie وأشوف ال post أو ال tweets أو ال comments عليه reviews عاملة إزاي.
فلو حد مثلا كتب لي unbelievably disappointing يبقى ده كده negative review. 'Full of zany characters and richly applied satire and some great plot twists' ده positive. 'This is the greatest screwball comedy ever filmed' ده positive. 'It was pathetic, the worst part about it was the boxing scene' يبقى ده إيه؟ negative. طب إزاي إن أنا أو إيه فايدة إن أنا أعمل application لل sentiment anal؟
ممكن برضه ال reviews بتاعت مثلا أي product, ده مثلا printer. ال reviews بتاعته مش بس بقى positive و negative فيها خمسة levels. فكل واحدة ease of use مثلًا ال value كل كل جزء من من ال printer أو كل feature ليها review عنها
فاقدر إن أنا أطلع في الآخر هي الحاجة دي ال review بتاعتها pos negative ولا أي level يعني.نفس الكلام برضه ده نوع تاني إن هو بيعمل مثلًا reviewing ده ال reviews بقى موجودة في كل حتة يعني في Amazon في أي حاجة بتشتريها online أو أي service حتى  ال Uber و ال Careem وكده لازم تعمل review في الآخر لل driver لكده.
فهو مش هيعين حد موظفين كتير أوي بقى يقعدوا يقرأوا كل ال reviews اللي موجودة على ال website بتاعهم أو على ال internet. فالبديل إن هو بيعمل application جاهزة بتعمل له الموضوع ال sentiment analysis ده، فبتدي له ال total في الآخر هو review بتاعه.
Sentiment analysis ليها أكتر من اسم.
بتتسمى opinion mining, بتتسمى opinion extraction, sentiment mining, subjectivity analysis. ممكن نقفل الباب يا بنات.ليه بحتاج ال sentiment analysis؟ زي ما قلنا إن أنا بعمل review على movie معين، أشوف رد فعل ال audience إيه. ال products نفسها أعرف الناس شايفة الحاجة دي إزاي. Public sentiment أشوف آراء ال consumers عمومًا في موضوع معين زي مثلا topic معين اتفتح online الناس كلها بقت بتتكلم فيه فأقدر.
يشوف رد فعل الناس ده إيه، ممكن آراء سياسية، خبر معين حد هيتعين جديد مش عارف إيه، فبتنزل خبر fake كده عنه الأول يشوف ردود أفعال الناس دي إيه على على الموضوع ده وbased عليه ياخد قرار مثلًا. Prediction إن هو يتوقع مثلًا election outcomes أو market trends from sentiment. يشوف الناس بتتكلم في إيه وال.
وال reviews إيه أو ال sentiment بتاعتهم إيه ويعمل أو ياخد قرارات.طب ده example على sentiment analysis. عندي training dataset فيها خمسة documents كل واحدة فيها جملة. وهي labeled dataset, هي positive و negative. ال cat دي اللي هي ال category. 'Just plain boring' هي ال category بتاعتها negative. 'Entirely predictable and lacks energy' negative.
'No surprises and very few laughs' ده negative. 'Very powerful' دي positive. 'The most fun film of the summer' دي positive. وأنا بدي له ال test اللي هو ال unlabeled بالنسبة له بقى حاجة unseen يقول لي إذا كان هي positive ولا negative. 'predictable with no fun' فأنا عايزة أعرف 'predictable with no fun' دي هتديني sentiment positive ولا sentiment neg.
طب أطبقه إزاي؟ بطبقه إزاي؟ عن طريق ال naïve Bayes نفس اللي عملناه في ال classification المرة اللي فاتت. بيعمل الكلام ده إزاي؟ كنا أول خطوة بنعمل إيه؟ ها؟ عايز أحسب ال probability عمومًا بتاعت ال positive وال negative. ال probability بتاعت ال positive عدد ال documents ال positive على total عدد ال corpus. كام على كام؟
2 على 5 و probability ال negative 3 على 5، دي أول خطوة. تاني خطوة هو عمل خطوة pre-processing في ال query إن هو شال كلمة 'with'. خلاص شال ال stop word. في ال query. لكن ما شالهاش من من ال corpus نفسها. تالت خطوة يعمل إيه بقى؟ بيحسب ال probability بتاعت كل كلمة في ال query.
given إنها negative وال probability بتاعت كل كلمة في ال query given إنها positive. طيب وبيعمل Laplace smoothing بالظبط كده. كلمة predictable في ال negative كام على كام؟ هي جاية مرة واحدة على total عدد كلمات ال negative اللي هي 14.
عملنا ال Laplace smoothing اتكلمنا عليه المرة اللي فاتت عشان في كلمات fun دي مثلا مش موجودة في ال negative فهتدي zero. فلازم أزود واحد فوق على total الكلمات في ال corpus نفسها. الكلمات ال مش redundant ها؟ ال unique words.
فهنا 1 + 1 إن predictable جات مرة في ال negative على total 14 كلمة في ال negative + ال 20 اللي هي total الكلمات.
في ال positive وال negative.طيب هنا no جات كام مرة في ال negative؟ مرة واحدة برضه فهتبقى 1 + 1 اللي هي smoothing على 14 + 20. fun ما جاتش خالص في ال negative ف 0 + 1 على 14 + 20. هتديني شوية values أضربهم في بعض وأضربهم في ال negative هتديني رقم.
بتاع ال positive نفس الكلام. predictable في ال positive ما جاتش خالص، فـ 0 + 1 على total الكلمات اللي في ال positive لأ هنا حسب ال redundant في ال total ده. بس ال 20 دي تقريبا ما حسبش فيها ال.
4,6,8,10,12,14 هنا في ال total اللي تحت، ال 20 ده بيشيل منها ال redundant. لكن ال total بتاع ال corpus نفسه أو بتاع ال class نفسه ما بيشيلش منها ال redundant. ف predictable ما جاتش ولا مرة في ال positive هزود ال 1 بتاعت ال smoothing على 9 اللي هي الكلمات اللي في ال positive + 20 total الكلمات ال unique اللي في ال cor.
no ما جاتش ولا مرة برضه في ال positive فـ 1 + 1 على 9 + 20. fun جات مرة واحدة هتبقى 1 + 1 على 9 + 20. هحسب دول وأضربهم في بعض وأضربهم في ال positive اللي هي 2 على 5 وأشوف ال value. هحسب ال scoring بالطريقة دي وآخد قراري يبقى أنا أقرب لمين؟ positive ولا negative.
positive. إزاي بقى؟ ال scoring أعلى هو ده الأقرب. مش أنا مش بحسب أقرب كمسافة فأجيب الأقل، لأ. اللي ليه scoring أعلى ال probability أكتر إنها تكون الإيه؟ تبع الإيه؟ ال negative. ده 6.1 هو نفس ال factor التاني, 10 power -5 و 10 power -5.
ف 6.1 أكبر من 3.2 يبقى أنا ال probability بتاعتي إن أنا أبقى negative. فعلًا 'predictable with no fun', 'no fun' دي أكيد هتبقى negative يعني مع إن كلمة fun تعتبر positive بس هو بيقول negation بقى بتاعها.
طيب أعمل optimization إزاي لل sentiment analysis؟ قالوا إن أنا والله ال word occurrence عندي مش شرط يعني إن الكلمة موجودة أو لأ أهم من إن أنا أقول هي موجودة كام مرة.
فبيعملوا حاجة اسمها ال binarization أو ال binary multinomial naïve Bayes. بي clip أو word counts at one لنفس ال document لال same document.
يعني إيه الكلام ده؟ يعني لو كنت بحسب أهو ال probability بتاعت class J مثلا هو total documents اللي في J على total number of documents في كله اللي هي مثلا 2 على 5 أو 3 على 5.
بعد كده بحسب ال probability بتاعت ال word given ال class ده. ال documents اللي فيها الكلمة دي وبعد كده على total الإيه؟ الكلمات وبحط ال Laplace smoothing. طب هزود إيه هنا؟ هشيل ال duplicates في كل document. وهخلي instance واحدة. ليه؟ لإن هم لقوا إن ال sentiment مش محتاجة أشوف إن كلمة مثلا fun اتكررت كام مرة على مستوى ال document. هي موجودة أو مش موجودة indication كفاية إن هي.
positive ولا negative.بنعمل إيه الكلام ده؟ دي نفس ال function اللي أنا بجيب بعد كده، دي الحسبة نفسها كـ كـ scientific term يعني، بجيب ال maximum في ال probability، إن أنا بضرب ال probability بتاعت ال class في times ال probabilities المختلفة بتاعت الكلمات class ده.اللي إحنا عملناها. ده دي مثلا عندي corpus تانية. 'It was pathetic, the worst part was the boxing scenes', 'no plot twists or great scenes' دول negative.
'satire and great plot twists', 'great scenes', 'great film' دول positives.
طيب الطبيعي عندي هو هنا بيعمل sorting alphabetic وأشوف كل واحدة متكررة كام مرة في ال positive متكررة كام مرة في ال negative. ف 'and' متكررة كام مرة في ال positive؟ 'and' و 'and'، اتنين. جات في ال negative؟ لأ ما جاتش خالص، يبقى zero.
boxing جات مرة في ال negative وما جاتش في ال film .positive موجودة مرة في ال positive و ما جاتش في ال great. negative موجودة في ال في ال positive تلات مرات، أهي great و great و great. موجودة في ال negative كام مرة؟ مرة واحدة. طيب وهكذا في الباقي. إيه الجديد عندي بقى؟
إن الحاجة اللي متكررة أكتر من مرة على مستوى ال document الواحد بعمل لها clipping وأخليها مرة واحدة. ده بي simplify الحسابات عندي وفي نفس الوقت هيدي نفس ال indication.فبعد ال binarization حصل إيه؟ بشيل ال redundant words بقى.
was و was هنا موجودة مرتين خليتها مرة واحدة. 'No plot twists or great scenes' مفيش تكرار لحاجة فسبتها. 'And satire and great plot twists' شلت ال 'and' وخليت 'and' واحدة. 'Great scenes film' شلت اتنين 'great' خليتهم واحدة. فال... الجديدة هتبقى إزاي؟
'and' دي كانت مكررة مرتين في ال positive والاتنين في نفس ال document، خليتها واحدة بس طالما في نفس ال document. طب 'great' مكررة تلات مرات على مستوى كام document؟ Two documents. يبقى أنا هنا في الآخر ال indication بتاعي هي عدد عدد ال documents اللي متكررة فيهم. بدل ما أقول عدد الكلمة متكررة كام مرة فاهمين الفرق؟
يعني أنا لو متكررة تلات مرات على مستوى two documents يبقى أنا يكفيني إن أنا أقول موجودة في two documents. طب أمال هنا يعني كلهم zeros و ones هنا مثلا دي فضلت زي ما هي scenes مثلا موجودة مرتين في ال negative. ال negative مرة هنا ومرة هنا، ففضلت اتنين، ما اتغيرتش ليه؟
لأن هي مرة ومرة، يبقى اللي أنا بغيره وبعمل له clipping لو أنا مكررة في نفس ال document الواحد.ده دي موضوع ال binarization. يبقى أنا ب count, can still be two. Binarization is within the document. ال document الواحد هو اللي بشيل منه البتاع، في الآخر زي ما قلت أنا بشوف هي موجودة متكررة كام مرة أو في كام document من الآخر ده ده ال indication بتاع.
الكلمة دي موجودة في كام document في ال positive؟ في كام document في ال negative؟ المفروض نكمل ال problem دي هنحسب ال probabilities وتشوفوا قبل ال binarization وبعد ال binarization ال decision اختلف ولا لأ؟ فده أنا سايبه لكم take-home exercise هتحسبوا ال Naïve Bayes probability لل problem اللي فاتت هتدخلوا أي query وتحسبوا له ال probability وتشوفوا هل قبل ال binarization اختلف عن بعد ال binarization أو لأ؟ والمحاضرة الجاية تقولوا لي ال decision بتاعكم إن شاء الله.
أنا كده خلصت المحاضرة وأشوفكم إن شاء الله الأسبوع اللي بعد العيد. شكراً.