הבעיה היא שיש לנו אוסף של מסמכים במאגר ובהינתן חיפוש בשפה חופשית של מילים, אנחנו נרצה לאחזר את המסמכים שעונים על השאלה.הפתרון הנאיבי הוא לעבור על כל המסמכים ולאחזר את המסמכים בהם הטקסט מופיע כ-substring במסמך הנתון. חסרון אחד הוא יעילות מכיוון שאנחנו רצים על כל המילים בכל המסמכים שלנו במאגר; אמנם נקבל בדיוק את כל התוצאות שמכילות את מחרוזת החיפוש, אבל במנועי אחזור על מסמכים נרצה בד"כ להתחשב במורפולוגיה, stemming, stop-words ועוד, לדוגמה עבור המחרוזת "הילד היפה" אני ארצה לראות תוצאות שמכילות את המחרוזת "ילד יפה", "הילד הגדול והיפה", "הילדים היפים" וכו'.
אני אציג גישה כללית לפתרון בעיית היעילות ותוכל לגזור משמעויות לגבי התרומה של זה על הדרך למורפולוגיה ואחזור חכם יותר.
הרעיון הכללי הוא לאנדקס את הטקסט בצורות שונות כך שבהינתן מחרוזת חיפוש, לא תצטרך לרוץ על כל המילים בכל הטקסטים. יש מבני נתונים שמאנדקסים טקסטים בצורה מאד כבדה בזיכרון, אבל חכמה בגישה כמו suffix-tree, שבעזרתם אתה יכול לחפש מחרוזות בטקסטים שלמים בצורה מאד מהירה.
גישה נוספת שעליה אני ארחיב מעט (ובד"כ היא מובנית ב-DATABASES) היא inverted-index. אתה מאנדקס למעשה את הקורפוס (קרי המילים שמופיעות בטקסטים) באופן כזה שאם המילה "ילד" הופיעה במסמכים 1,5 ו-7 אז תהיה רשומה בטבלה entries שמצמידה את המילה "ילד" עם מסמכים 1,5 ו-7 (ולפעמים גם שומרת את המיקומים בהם המילה מופיעה במסמך). אתה רוצה לאנדקס צורה קנונית של המילה (אתה יכול למשל לאחד ללבוש, לבש, לבוש לתוך צורה קנונית של ל.ב.ש או לשמור צורות קנוניות עם חלקי הדיבר שלו, לדוגמה הצורה הקנונית ל.ב.ש מופיעה בטקסט 5 כשם עצם ומופיעה בטקסט 9 כפועל בזמן עבר). על הדרך אתה נפטר מ-stopwords (מילות קישור למיניהן למשל "את", הא הידיעה, "עם").
עתה, איך אתה מבצע תהליך של אחזור? כאשר אני מחפש "הילד היפה", אני מבצע תהליך מורפולוגי על המילים במשפט ואחפש למעשה ב-inverted-index באיזה טקסטים המילה "ילד" והמילה "יפה" הופיעו. אני אבצע חיתוך בין התוצאות ואפעיל אלגוריתם דירוג שיקבע את רלוונטיות התוצאות (כך למשל משפט כמו "הילדים אכלו מרק והקפידו על תיונה בריאה. אין פלא שלאחר מספר שנים הפכו אלו לנערים חסונים ויפים" יכול לחזור בשיטה זו).
אז מה אתה מרוויח?
שיפור משמעותי ביעילות - במקום לרוץ על כל הטקסטים, אתה רץ על אינדקסים (למשל inverted-index).
אתה מאחזר תוצאות שאתה רוצה לראות.כמובן שכדאי להשתמש בזה רק כאשר הבעיה היא בעיית אחזור על טקסטים גדולים. לצערנו הכלים המובנים ב-DATABASES הם סבירים מינוס לשפה האנגלית וגרועים לשפות אחרות. יש חברות שלמות שמתעסקות רק בשירותים מורפולוגים, אחרות עובדות על אלגוריתמי דירוג חכמים, אחרות על האינדוקס עצמו (האם לאנדקס לפי terms, האם לציין שמות עצם, עצמים, לבצע תהליך של texnomia ועוד המון דברים).
