рдЖрдЬрдХрд▓, рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдЬреЗрдВрдЯреЛрдВ рдХреА рджрд┐рдирдЪрд░реНрдпрд╛ рдПрдХ рджреИрдирд┐рдХ рджрд┐рдирдЪрд░реНрдпрд╛ рдмрдирддреА рдЬрд╛ рд░рд╣реА рд╣реИ, рдФрд░ рд╕рдВрд╡рд╛рдж рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╡реЗ рдпрдерд╛рд╕рдВрднрд╡ рдорд╛рдирд╡ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рдореБрдЦреНрдп рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднрд╛рд╡рдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЬрд╛рдЧрд░реВрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рдердорд┐рдХ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо
рдкрд╛рда рд╡рд╛рд░реНрддрд╛рд▓рд╛рдкреЛрдВ рдореЗрдВ рднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ
рд╕реЗрдордПрд╡рд▓-2019 рдЯрд╛рд╕реНрдХ 3 "рдЗрдореЛрдХреЛрдЯреЗрдХреНрд╕реНрдЯ" , рдпрд╛рдиреА рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдореВрд▓реНрдпрд╛рдВрдХрди рдкрд░ рдПрдХ рд╡рд╛рд░реНрд╖рд┐рдХ рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрд╛рд░реНрдп рдЙрджреНрджреЗрд╢реНрдп 3-рдмрд╛рд░реА рд╕рдВрд╡рд╛рджреА рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рднрд╛рд╡рдирд╛ (рдпрд╛рдиреА рдЦреБрд╢, рдЙрджрд╛рд╕, рдХреНрд░реЛрдзрд┐рдд рдФрд░ рдЕрдиреНрдп) рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред
рд╢реЗрд╖ рд▓реЗрдЦ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИред рдзрд╛рд░рд╛ 1 рдореЗрдВ EmoContext рдХрд╛рд░реНрдп рдФрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдзрд╛рд░рд╛ 2 рдФрд░ 3 рдЧреНрд░рдВрдереЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдкреВрд░реНрд╡ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧ, рдлрд▓рд╕реНрд╡рд░реВрдкред рдЦрдВрдб 4 рдореЗрдВ, рд╣рдордиреЗ рд╣рдорд╛рд░реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ LSTM рдореЙрдбрд▓ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЕрдВрддрд┐рдо рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдбрд▓ рдХреЛ рдХреЗрдпрд░реНрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
1. рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбреЗрдЯрд╛
SemEval-2019 рдЯрд╛рд╕реНрдХ 3 "EmoContext" рдкрд╛рдареНрдп рдмрд╛рддрдЪреАрдд рдореЗрдВ рд╕рдВрджрд░реНрдн рднрд╛рд╡рдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред EmoContext рдореЗрдВ, рдПрдХ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдореЗрдВ рд╕рдВрджрд░реНрдн рдХреЗ 2 рдореЛрдбрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рдард╛рддреНрдордХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдЪреНрдЪрд╛рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрдВ рдпрд╣ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЕрдЧрд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдЪреНрдЪрд╛рд░рдг рдХреА рднрд╛рд╡рдирд╛ "рдЦреБрд╢", "рдЙрджрд╛рд╕", "рдирд╛рд░рд╛рдЬ" рдпрд╛ "рдЕрдиреНрдп" (рддрд╛рд▓рд┐рдХрд╛ 1) рд╣реИред рдПрдХ рдЕрдирд╛рдо рд╡реНрдпрдХреНрддрд┐ (Tuen-1 рдФрд░ Turn-3) рдФрд░
AI- рдЖрдзрд╛рд░рд┐рдд рдЪреИрдЯрдмреЛрдЯ
Ruuh (Turn-2): рдХреЗрд╡рд▓ рджреЛ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рдкреНрд░рддрд┐рднрд╛рдЧреА рд╣реИрдВред рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ (
рдЪрдЯрд░реНрдЬреА рдПрдЯ рдЕрд▓ред, 2019 )ред
рддрд╛рд▓рд┐рдХрд╛ 1. EmoContext рдбреЗрдЯрд╛рд╕реЗрдЯ рджрд┐рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЙрджрд╛рд╣рд░рдг ( рдЪрдЯрд░реНрдЬреА рдПрдЯ рдЕрд▓ред, 2019 )рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рджреМрд░рд╛рди, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдп рдЖрдпреЛрдЬрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП 30160 рдорд╛рдирд╡-рд▓реЗрдмрд▓ рд╡рд╛рд▓реЗ рдкрд╛рда рд╣реИрдВ, рдЬрд╣рд╛рдВ "рдХреНрд░реЛрдзрд┐рдд", "рдЙрджрд╛рд╕", "рдЦреБрд╢" рд╡рд░реНрдЧ рдФрд░ "рдЕрдиреНрдп" рд╡рд░реНрдЧ (рддрд╛рд▓рд┐рдХрд╛ 2) рдХреЗ рд▓рд┐рдП 15000 рдирдореВрдиреЗ рд╣реИрдВред рджреЗрд╡ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕реЗрдЯ, рдЬреЛ рдЖрдпреЛрдЬрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдереЗ, рдПрдХ рдЯреНрд░реЗрди рд╕реЗрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рд╡рд┐рддрд░рдг рд╣реИ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╡реБрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ 4% рд╣реИ рдФрд░ рдмрд╛рдХреА "рдЕрдиреНрдп" рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд╣реИред Microsoft рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдФрд░
рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд▓рд┐рдВрдХреНрдбрдЗрди рд╕рдореВрд╣ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рддрд╛рд▓рд┐рдХрд╛ 2. рдбреЗрдЯрд╛рд╕реЗрдЯ рдореЗрдВ рднрд╛рд╡рдирд╛ рд╡рд░реНрдЧ рд▓реЗрдмрд▓ рд╡рд┐рддрд░рдг ( рдЪрдЯрд░реНрдЬреА рдПрдЯ рдЕрд▓ред, 2019 )редрдЗрд╕ рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП 300k рдЯреНрд╡реАрдЯ рдХреЗ рджреВрд░ рдХрд╛ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП 900k рдЕрдВрдЧреНрд░реЗрдЬреА рдЯреНрд╡реАрдЯ рдПрдХрддреНрд░ рдХрд┐рдПред рджреВрд░ рдбреЗрдЯрд╛рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧреЛ рдПрдЯ рдЕрд▓ рдХреА рд░рдгрдиреАрддрд┐ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИрдВред (реирежреж реп), рдЬрд┐рд╕рдХреЗ рддрд╣рдд рд╣рдо рдХреЗрд╡рд▓ рднрд╛рд╡рдирд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╢рдмреНрджреЛрдВ рдЬреИрд╕реЗ '#angry', '#annoyed', '#happy', '#sad,' #surprised '' рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдЯреНрд╡реАрдЯ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдХреНрд╡реЗрд░реА рд╢рд░реНрддреЛрдВ рдХреА рд╕реВрдЪреА SemEval-2018 AIT DISC (
рдбреБрдкреНрдкрд╛рдбрд╛ рдПрдЯ рдЕрд▓ред, 2018 ) рдХреА рдХреНрд╡реЗрд░реА рд╢рд░реНрддреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереАред
EmoContext рдХрд╛ рдкреНрд░рдореБрдЦ рдкреНрд░рджрд░реНрд╢рди рдореАрдЯреНрд░рд┐рдХ рддреАрди рднрд╛рд╡рдирд╛ рд╡рд░реНрдЧреЛрдВ рдпрд╛рдиреА 'рдЙрджрд╛рд╕', 'рдЦреБрд╢' рдФрд░ 'рдХреНрд░реЛрдзрд┐рдд' рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдХреНрд╖реНрдо-рдФрд╕рдд F1 рд╕реНрдХреЛрд░ рд╣реИред
def preprocessData(dataFilePath, mode): conversations = [] labels = [] with io.open(dataFilePath, encoding="utf8") as finput: finput.readline() for line in finput: line = line.strip().split('\t') for i in range(1, 4): line[i] = tokenize(line[i]) if mode == "train": labels.append(emotion2label[line[4]]) conv = line[1:4] conversations.append(conv) if mode == "train": return np.array(conversations), np.array(labels) else: return np.array(conversations) texts_train, labels_train = preprocessData('./starterkitdata/train.txt', mode="train") texts_dev, labels_dev = preprocessData('./starterkitdata/dev.txt', mode="train") texts_test, labels_test = preprocessData('./starterkitdata/test.txt', mode="train")
2. рдЯреЗрдХреНрд╕ рдкреНрд░реА-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
рдХрд┐рд╕реА рднреА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдг рд╕реЗ рдкрд╣рд▓реЗ, рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдЯреЗрдХреНрд╕реНрдЯ рдЯреВрд▓ рдПрдХрдлреНрд░рд╕рд┐рд╕ (рдмрд╛рдЬреЛрдЯрд┐рд╕ рдПрдЯ рдЕрд▓ред, 2017) рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрд╡-рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЙрдкрдХрд░рдг рд╡рд░реНрддрдиреА рд╕реБрдзрд╛рд░, рд╢рдмреНрдж рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг, рд╡рд┐рднрд╛рдЬрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖ рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдХреМрди рд╕реЗ рдЯреЛрдХрди рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдпрд╛ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдордиреЗ рдкреВрд░реНрд╡-рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
- URL, рдИрдореЗрд▓, рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдкреНрд░рддрд┐рд╢рдд, рдореБрджреНрд░рд╛рдПрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╕рдВрдмрдВрдзрд┐рдд рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреА рдЧрдИрдВред
- рдмрд╛рд░-рдмрд╛рд░, рд╕реЗрдВрд╕рд░ рдХрд┐рдП рдЧрдП, рд▓рдореНрдмреА рдФрд░ рдкреВрдВрдЬреАрдХреГрдд рд╢рдмреНрджреЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдмрдврд╝реЗ рд╣реБрдП рд╢рдмреНрдж рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╢рдмреНрдж рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдХреЙрд░реНрдкрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣реА рдХрд┐рдП рдЧрдП рдереЗред
- рд╣реИрд╢рдЯреИрдЧ рдФрд░ рд╕рдВрдХреБрдЪрди рдЕрдирдкреИрдХрд┐рдВрдЧ (рдпрд╛рдиреА рд╢рдмреНрдж рд╡рд┐рднрд╛рдЬрди) рдмрд┐рд▓реНрдЯ-рдЗрди рд╢рдмреНрдж рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рдХреЛрд╖ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- рдкрд╛рда рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЧрдП рд╢рдмреНрджреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╢рдмреНрджрдХреЛрд╢ рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬреЛрд░ рдПрдХ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЗрдореЛрдЬреАрд╕, рдЗрдореЛрдЯрд┐рдХреЙрдиреНрд╕ рдФрд░ рдЬрдЯрд┐рд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдЬреИрд╕реЗ рдХрд┐ рд╕реЗрдВрд╕рд░, рдЬреЛрд░ рдФрд░ рд▓рдореНрдмреА рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рддрд╛рд░реАрдЦреЛрдВ, рд╕рдордп, рдореБрджреНрд░рд╛рдУрдВ, рдФрд░ рдпреЛрдЧреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рддрд╛рд▓рд┐рдХрд╛ 3. рдкрд╛рда рдкреВрд░реНрд╡-рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЙрджрд╛рд╣рд░рдгред from ekphrasis.classes.preprocessor import TextPreProcessor from ekphrasis.classes.tokenizer import SocialTokenizer from ekphrasis.dicts.emoticons import emoticons import numpy as np import re import io label2emotion = {0: "others", 1: "happy", 2: "sad", 3: "angry"} emotion2label = {"others": 0, "happy": 1, "sad": 2, "angry": 3} emoticons_additional = { '(^уГ╗^)': '<happy>', ':тАСc': '<sad>', '=тАСd': '<happy>', ":'тАС)": '<happy>', ':тАСd': '<laugh>', ':тАС(': '<sad>', ';тАС)': '<happy>', ':тАС)': '<happy>', ':\\/': '<sad>', 'd=<': '<annoyed>', ':тАС/': '<annoyed>', ';тАС]': '<happy>', '(^ ^)': '<happy>', 'angru': 'angry', "dтАС':": '<annoyed>', ":'тАС(": '<sad>', ":тАС[": '<annoyed>', '( ? )': '<happy>', 'xтАСd': '<laugh>', } text_processor = TextPreProcessor(
3. рд╡рд░реНрдб рдПрдВрдмреЗрдбрд┐рдВрдЧ
рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдПрдирдПрд▓рдкреА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдЧрд╣рди-рд╢рд┐рдХреНрд╖рдг рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣рд┐рд╕реНрд╕рд╛ рдмрди рдЧрдП рд╣реИрдВред рднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╡реИрдХреНрдЯрд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Word2Vec (
рдорд┐рдХреЛрд▓реЛрд╡ рдПрдЯ рдЕрд▓ред, 2013 ), рдЧреНрд▓реЛрд╡реА (
рдкреЗрдирд┐рдВрдЧрдЯрди рдПрдЯ рдЕрд▓ред, 2014 ) рдФрд░ рдлрд╛рд╕реНрдЯрдЯреИрдХреНрд╕ (
рдЬреВрд▓рд┐рди рдПрдЯ рдЕрд▓ред, 2017 ) рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреЗрдЯрд╛рд╕реНрдЯреЛрд░реАрдЬрд╝ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рд╢рдмреНрдж рд╡реИрдХреНрдЯрд░ (
рдмрд╛рдЬреЛрдЯрд┐рд╕ рдПрдЯ рдЕрд▓ред, 2017 )ред Word2Vec рдХреА рдкреНрд░рдореБрдЦ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╢рдмреНрджреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЛрд╖ рдореЗрдВ рдЖрдо рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╡реЗрдХреНрдЯрд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдирд┐рдХрдЯрддрд╛ рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред Word2Vec рдФрд░ Glove рджреЛрдиреЛрдВ рдореЙрдбрд▓ рдЕрдкрдиреА рд╕рд╣-рдШрдЯрдирд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рд╢рдмреНрджреЛрдВ рдХреЗ рдЬреНрдпрд╛рдорд┐рддреАрдп рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реАрдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкреВрд░реНрд╡ рдПрдХ рднрд╡рд┐рд╖реНрдп рдХрд╣рдиреЗрд╡рд╛рд▓рд╛ рдореЙрдбрд▓ рд╣реИ, рдФрд░ рдмрд╛рдж рд╡рд╛рд▓рд╛ рдПрдХ рдЧрд┐рдирддреА-рдЖрдзрд╛рд░рд┐рдд рдореЙрдбрд▓ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЬрдмрдХрд┐ Word2Vec рдПрдХ рд▓рдХреНрд╖реНрдп рд╢рдмреНрдж (CBOW рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░) рдпрд╛ рдПрдХ рд╕рдВрджрд░реНрдн (Skip-gram рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░) рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рдпрд╛рдиреА рд╣рд╛рдирд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, GloVe рд╕рд╣-рдШрдЯрдирд╛ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдкрд░ рдЖрдпрд╛рдореАрддрд╛ рдореЗрдВ рдХрдореА рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╢рдмреНрдж рд╡реИрдХреНрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред FastText Word2Vec рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕ рддрдереНрдп рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХрд┐ рдпрд╣ рд╢рдмреНрдж рд╡реИрдХреНрдЯрд░ рд╕реАрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдг n-рдЧреНрд░рд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЖрдЙрдЯ-рдСрдл-рд╢рдмреНрджрд╛рд╡рд▓реА рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рднреА рддрдХрдиреАрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░реИрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣рдо рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг LSTM рдореЙрдбрд▓ (рдордВрдж = 64) рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд░реЙрд╕-рдорд╛рдиреНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рднрд╛рд╡рд╢реАрд▓рддрд╛ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, DataStories рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдиреЗ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдФрд╕рдд F1 рд╕реНрдХреЛрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ред
рдЪрдпрдирд┐рдд рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЛ рд╢рдмреНрджреЛрдВ рдХреА рднрд╛рд╡рдирд╛рддреНрдордХ рдзреНрд░реБрд╡рддрд╛ рдХреЗ рд╕рд╛рде рд╕рдореГрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓реЗрдмрд▓ рдХрд┐рдП рдЧрдП рджреВрд░ рдХреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЗ рдПрдХ рдмрдврд╝рд┐рдпрд╛-рдЯреНрдпреВрдирд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рджреВрд░рд╕реНрде рдкреВрд░реНрд╡ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдорд╣рддреНрд╡ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (
рдбреЗрд░рд┐рдпреВ рдПрдЯ рдЕрд▓ред, 201 7)ред рд╣рдо рдирд╛рд░рд╛рдЬрд╝, рдЙрджрд╛рд╕ рдФрд░ рдЦреБрд╢ рдЯреНрд╡реАрдЯреНрд╕ рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ LSTM рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд░ рдХреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреА рдкрд░рдд рдкрд╣рд▓реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреБрдЧ рдХреЗ рд▓рд┐рдП рдЬрдореА рд╣реБрдИ рдереА, рддрд╛рдХрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╡реЗрдЯ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрджрд▓рд╛рд╡ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдлрд┐рд░ рдпрд╣ рдЕрдЧрд▓реЗ 5 рдпреБрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдерд╛ред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдг рдХреЗ рдмрд╛рдж, рдареАрдХ-рдареАрдХ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЛ рдЖрдЧреЗ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рдФрд░
рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдпрд╛ рдЧрдпрд╛ ред
def getEmbeddings(file): embeddingsIndex = {} dim = 0 with io.open(file, encoding="utf8") as f: for line in f: values = line.split() word = values[0] embeddingVector = np.asarray(values[1:], dtype='float32') embeddingsIndex[word] = embeddingVector dim = len(embeddingVector) return embeddingsIndex, dim def getEmbeddingMatrix(wordIndex, embeddings, dim): embeddingMatrix = np.zeros((len(wordIndex) + 1, dim)) for word, i in wordIndex.items(): embeddingMatrix[i] = embeddings.get(word) return embeddingMatrix from keras.preprocessing.text import Tokenizer embeddings, dim = getEmbeddings('emosense.300d.txt') tokenizer = Tokenizer(filters='') tokenizer.fit_on_texts([' '.join(list(embeddings.keys()))]) wordIndex = tokenizer.word_index print("Found %s unique tokens." % len(wordIndex)) embeddings_matrix = getEmbeddingMatrix(wordIndex, embeddings, dim)
4. рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛
рдПрдХ рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ (RNN) рдХреГрддреНрд░рд┐рдо рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдПрдХ рдкрд░рд┐рд╡рд╛рд░ рд╣реИ рдЬреЛ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрд░рдЖрд░рдПрди рдХреЛ рдЕрдиреБрдХреНрд░рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдкрдиреЗ рдЖрдВрддрд░рд┐рдХ рднрд╛рд░ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдбреЗрдЯрд╛ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП, рдЖрд░рдЖрд░рдПрди рдХреА рдЧрдгрдирд╛ рдЧреНрд░рд╛рдл рдореЗрдВ рдЪрдХреНрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкрд┐рдЫрд▓реА рд╕реВрдЪрдирд╛ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВред RNN рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд▓реЙрдиреНрдЧ рд╢реЙрд░реНрдЯ-рдЯрд░реНрдо рдореЗрдореЛрд░реА рдиреЗрдЯрд╡рд░реНрдХ (LSTM) рдХреЛ 1997 (
Hochreiter рдФрд░ Schmidhuber, 1997 ) рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред LSTM рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдФрд░ рдзрдорд╛рдХрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд░рдорд┐рдХ рдореБрджреНрджреЛрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд░реАрдХреЗ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВред рдкрд░рдВрдкрд░рд╛рдЧрдд LSTM рдХреЗрд╡рд▓ рдЕрддреАрдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рджреНрд╡рд┐рджрд┐рд╢ LSTM рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдЪрд▓рддреА рд╣реБрдИ рджреЛ рдЫрд┐рдкреА LSTM рдкрд░рддреЛрдВ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ, рдЬрд╣рд╛рдВ рдПрдХ рд╕рдордп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рд╕рдордп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЕрддреАрдд рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рджреЛрдиреЛрдВ рд░рд╛рдЬреНрдпреЛрдВ рд╕реЗ рдПрдХ рд╕рд╛рде рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ (
Schuster рдФрд░ рдкрд╛рд▓реАрд╡рд╛рд▓, 1997 )ред
рдЪрд┐рддреНрд░ 1: рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ред рдкрд╣рд▓реА рдмрд╛рд░реА рдХреЗ рд▓рд┐рдП LSTM рдЗрдХрд╛рдИ рдФрд░ рддреАрд╕рд░реА рдмрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕рд╛рдЭрд╛ рд╡рдЬрди рд╣реИредрд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрд╡рд▓реЛрдХрди рдЪрд┐рддреНрд░ 1 рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдЗрдХрд╛рдИ рдФрд░ рджреЛ рджреНрд╡рд┐рджрд┐рд╢ LSTM рдЗрдХрд╛рдЗрдпрд╛рдВ (рдордВрдж = 64) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдкреВрд░реНрд╡ LSTM рдЗрдХрд╛рдИ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдпрд╛рдиреА рдкрд╣рд▓реА рдмрд╛рд░реА рдФрд░ рдмрд╛рддрдЪреАрдд рдХрд╛ рддреАрд╕рд░рд╛ рдореЛрдбрд╝) рдХреЗ рдЙрдЪреНрдЪрд╛рд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЙрджреНрджреЗрд╢реНрдп рджреВрд╕рд░реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рдпрд╛рдиреА рджреВрд╕рд░реА рдмрд╛рд░реА) рдХреЗ рдЙрдЪреНрдЪрд╛рд░рдг рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рд╣реИред рдпреЗ рджреЛ рдЗрдХрд╛рдЗрдпрд╛рдБ рди рдХреЗрд╡рд▓ рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рднрд╛рд╡реБрдХрддрд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рд░реНрддрд╛рд▓рд╛рдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдЪреНрдЪрд╛рд░рдг рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╢рдмреНрдж рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рджреНрд╡рд┐рджрд┐рд╢ LSTM рдЗрдХрд╛рдИ рдореЗрдВ рдЦрд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЗрди рддреАрди рдлреАрдЪрд░ рдореИрдкреНрд╕ рдХреЛ рдПрдХ рд╕рдорддрд▓ рдлреАрдЪрд░ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рд╕рдорддрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рдЫрд┐рдкреЗ рд╣реБрдП рд▓реЗрдпрд░ (рдбрд┐рдо = 30) рдХреЛ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд╛рдкреНрдд рд╡реИрдХреНрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдкрд░рд╕реНрдкрд░ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЕрдВрддрд┐рдо рд╕реНрддрд░ рдХреЗ рд▓реЗрдмрд▓ рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рд╕рдХреНрд░рд┐рдпрдг рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдпрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рддреА рд╣реИрдВред рдУрд╡рд░рдлрд┐рдЯрд┐рдВрдЧ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреМрд╕рд┐рдпрди рд╢реЛрд░ рдХреЗ рд╕рд╛рде рдирд┐рдпрдорд┐рддреАрдХрд░рдг рдкрд░рддреЛрдВ рдХреЛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдкрд░рдд рдХреЗ рдмрд╛рдж рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдбреНрд░реЙрдкрдЖрдЙрдЯ рд▓реЗрдпрд░реНрд╕ (
рд╢реНрд░реАрд╡рд╛рд╕реНрддрд╡ рдПрдЯ рдЕрд▓ред, 2014 ) рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдПрд▓рдПрд╕рдЯреАрдПрдо рдЗрдХрд╛рдИ (рдкреА = 0.2) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЫрд┐рдкреЗ рд╣реБрдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреБрдбрд╝реЗ рдкрд░рдд (рдкреА = 0.1) рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред
from keras.layers import Input, Dense, Embedding, Concatenate, Activation, \ Dropout, LSTM, Bidirectional, GlobalMaxPooling1D, GaussianNoise from keras.models import Model def buildModel(embeddings_matrix, sequence_length, lstm_dim, hidden_layer_dim, num_classes, noise=0.1, dropout_lstm=0.2, dropout=0.2): turn1_input = Input(shape=(sequence_length,), dtype='int32') turn2_input = Input(shape=(sequence_length,), dtype='int32') turn3_input = Input(shape=(sequence_length,), dtype='int32') embedding_dim = embeddings_matrix.shape[1] embeddingLayer = Embedding(embeddings_matrix.shape[0], embedding_dim, weights=[embeddings_matrix], input_length=sequence_length, trainable=False) turn1_branch = embeddingLayer(turn1_input) turn2_branch = embeddingLayer(turn2_input) turn3_branch = embeddingLayer(turn3_input) turn1_branch = GaussianNoise(noise, input_shape=(None, sequence_length, embedding_dim))(turn1_branch) turn2_branch = GaussianNoise(noise, input_shape=(None, sequence_length, embedding_dim))(turn2_branch) turn3_branch = GaussianNoise(noise, input_shape=(None, sequence_length, embedding_dim))(turn3_branch) lstm1 = Bidirectional(LSTM(lstm_dim, dropout=dropout_lstm)) lstm2 = Bidirectional(LSTM(lstm_dim, dropout=dropout_lstm)) turn1_branch = lstm1(turn1_branch) turn2_branch = lstm2(turn2_branch) turn3_branch = lstm1(turn3_branch) x = Concatenate(axis=-1)([turn1_branch, turn2_branch, turn3_branch]) x = Dropout(dropout)(x) x = Dense(hidden_layer_dim, activation='relu')(x) output = Dense(num_classes, activation='softmax')(x) model = Model(inputs=[turn1_input, turn2_input, turn3_input], outputs=output) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc']) return model model = buildModel(embeddings_matrix, MAX_SEQUENCE_LENGTH, lstm_dim=64, hidden_layer_dim=30, num_classes=4)
5. рдкрд░рд┐рдгрд╛рдо
рдЗрд╖реНрдЯрддрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдЦреЛрдЬ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдордиреЗ рди рдХреЗрд╡рд▓ рдкрд░рддреЛрдВ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╕рдХреНрд░рд┐рдпрдг рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдирд┐рдпрдорд┐рддреАрдХрд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╕рд╛рде рднреА рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ред рдЗрд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА
рдореВрд▓ рдкреЗрдкрд░ рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИред
рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдореЙрдбрд▓ рдиреЗ рджреЗрд╡ рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд╕реНрдХреЛрд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдХреЗ рдЕрдВрддрд┐рдо рдореВрд▓реНрдпрд╛рдВрдХрди рдЪрд░рдг рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдВрддрд┐рдо рдкрд░реАрдХреНрд╖рдг рдбреЗрдЯрд╛рд╕реЗрдЯ рдкрд░, рдЙрд╕рдиреЗ рднрд╛рд╡рдирд╛рддреНрдордХ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП 72.59% рд╕реВрдХреНрд╖реНрдо-рдФрд╕рдд рдПрдл 1 рд╕реНрдХреЛрд░ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рд╕реНрдХреЛрд░ 79.5% рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХрд╛рд░реНрдп рдЖрдпреЛрдЬрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рд╕реЗ рдКрдкрд░ рд╣реИ, рдЬреЛ 58.68% рдерд╛ред
рдореЙрдбрд▓ рдФрд░ рд╢рдмреНрдж-рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб GitHub рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИред
рд▓реЗрдЦ рдХрд╛ рдкреВрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдФрд░
рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг рдкреЗрдкрд░ рдПрд╕реАрдПрд▓ рдПрдВрдереЛрд▓реЙрдЬреА рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдбрд╛рдЯрд╛рд╕реЗрдЯ рд▓рд┐рдВрдХреНрдбрдЗрди рдкрд░ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рд╕рдореВрд╣ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред
рдкреНрд░рд╢рд╕реНрддрд┐ рдкрддреНрд░:
@inproceedings{smetanin-2019-emosense, title = "{E}mo{S}ense at {S}em{E}val-2019 Task 3: Bidirectional {LSTM} Network for Contextual Emotion Detection in Textual Conversations", author = "Smetanin, Sergey", booktitle = "Proceedings of the 13th International Workshop on Semantic Evaluation", year = "2019", address = "Minneapolis, Minnesota, USA", publisher = "Association for Computational Linguistics", url = "https://www.aclweb.org/anthology/S19-2034", pages = "210--214", }