0 Daumen
211 Aufrufe

Ich habe versucht, die Ähnlichkeit des Kosinus zwischen zwei Spalten eines Datenrahmens 'Zug' nach [diesem Tutorial] [1] zu berechnen:
    train["diff"] = (train["quest_emb"] - train["sent_emb"])**2

Bei der Berechnung scheint es jedoch einen Dimensionsfehler mit dem von GloVe stammenden Einbettungsvektor zu geben.


    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    ~/Documents/programming/mybot/mybotenv/lib/python3.5/site-packages/pandas/core/ops.py in safe_na_op(lvalues, rvalues)
      1032            with np.errstate(all='ignore'):
    -> 1033                return na_op(lvalues, rvalues)
      1034        except Exception:
   
    ~/Documents/programming/mybot/mybotenv/lib/python3.5/site-packages/pandas/core/ops.py in na_op(x, y)
      1011        try:
    -> 1012            result = expressions.evaluate(op, str_rep, x, y, **eval_kwargs)
      1013        except TypeError:
   
    ~/Documents/programming/mybot/mybotenv/lib/python3.5/site-packages/pandas/core/computation/expressions.py in evaluate(op, op_str, a, b, use_numexpr, **eval_kwargs)
        204    if use_numexpr:
    --> 205        return _evaluate(op, op_str, a, b, **eval_kwargs)
        206    return _evaluate_standard(op, op_str, a, b)
   
    ~/Documents/programming/mybot/mybotenv/lib/python3.5/site-packages/pandas/core/computation/expressions.py in _evaluate_standard(op, op_str, a, b, **eval_kwargs)
        64    with np.errstate(all='ignore'):
    ---> 65        return op(a, b)
        66
   
    ValueError: operands could not be broadcast together with shapes (1,4096) (7,)
   
    During handling of the above exception, another exception occurred:
   
    ValueError                                Traceback (most recent call last)
    <ipython-input-81-af28fc11a9d3> in <module>()
    ----> 1 predicted = predictions(train)
   
    <ipython-input-80-1699cf33d87c> in predictions(train)
          2
          3    train["cosine_sim"] = train.apply(cosine_sim, axis = 1)
    ----> 4    train["diff"] = (train["quest_emb"] - train["sent_emb"])**2
          5    train["euclidean_dis"] = train["diff"].apply(lambda x: list(np.sum(x, axis = 1)))
          6    del train["diff"]
   
    ~/Documents/programming/mybot/mybotenv/lib/python3.5/site-packages/pandas/core/ops.py in wrapper(left, right)
      1067            rvalues = rvalues.values
      1068
    -> 1069        result = safe_na_op(lvalues, rvalues)
      1070        return construct_result(left, result,
      1071                                index=left.index, name=res_name, dtype=None)
   
    ~/Documents/programming/mybot/mybotenv/lib/python3.5/site-packages/pandas/core/ops.py in safe_na_op(lvalues, rvalues)
      1035            if is_object_dtype(lvalues):
      1036                return libalgos.arrmap_object(lvalues,
    -> 1037                                              lambda x: op(x, rvalues))
      1038            raise
      1039
   
    pandas/_libs/algos_common_helper.pxi in pandas._libs.algos.arrmap_object()
   
    ~/Documents/programming/mybot/mybotenv/lib/python3.5/site-packages/pandas/core/ops.py in <lambda>(x)
      1035            if is_object_dtype(lvalues):
      1036                return libalgos.arrmap_object(lvalues,
    -> 1037                                              lambda x: op(x, rvalues))
      1038            raise
      1039
   
        ValueError: operands could not be broadcast together with shapes (1,4096) (130318,)



4096 entspricht den durch die Funktion des Codierers konstruierten Vektoren und 130318 entspricht der Anzahl der Zeilen des Datenrahmens.

Es scheint nicht so zu sein, dass die beiden Säulen sich in ihrer Größe unterscheiden

    print("len(train[\"quest_emb\"])",len(train["quest_emb"]))
    print("len(train[\"sent_emb\"])",len(train["sent_emb"]))
   
    len(train["quest_emb"]) 130318
    len(train["sent_emb"]) 130318


Die zwei Spalten sehen so aus:


    sent_emb                                         quest_emb
    0 [[0.030376578, 0.044331014, 0.081356354, 0.062... [[0.01491953, 0.021973763, 0.021364095, 0.0393...
    1 [[0.030376578, 0.044331014, 0.081356354, 0.062... [[0.04444952, 0.028005758, 0.030357722, 0.0375...
    2 [[0.030376578, 0.044331014, 0.081356354, 0.062... [[0.03949683, 0.04509903, 0.018089347, 0.07667...
      ...


Nachdem wir die Größe der zwei Spalten überprüft haben, die die gleichen sind und nicht wirklich wissen, woher die anderen Zahlen kommen, ** warum nennen wir die Dimension des Einbettungsvektors, wenn ich Vektoren subtrahiere, die zwei Texte repräsentieren? **

Ziel ist es, unüberwachtes Lernen zu ermöglichen. Der komplette Code, aber nicht aktualisiert [ist über Github] [2].

  [1]: https://towardsdatascience.com/building-a-question-answering-system-part-1-9388aadff507
  [2]: https://github.com/aswalin/SQuAD/blob/master/unsupervised.ipynb

von

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community