A method for decoding data, comprising: obtaining a first block of data, either from a storage medium or by receiving, via a network interface, a first block of data transmitted by a computing device, wherein the first block of data comprises a first codeword generated based on an error correction code comprising a polar code; obtaining a first set of likelihood values from a neural network, wherein: the neural network determines the first set of likelihood values based on analysis of previously decoded blocks of data; and each likelihood value of the first set of likelihood values indicates a probability that the first codeword corresponds to a respective decoded value of a plurality of decoded values; obtaining a second set of likelihood values from a polar decoder based on the first block of data, wherein decoding the first codeword comprises performing list decoding to determine the second set of likelihood values, and wherein each likelihood value of the second set of likelihood values indicates a probability that the first codeword corresponds to a respective decoded value of the plurality of decoded values; and decoding the first codeword to obtain a decoded value based on the first set of likelihood values and the second set of likelihood values by combining each likelihood value from the first set of likelihood values with a respective likelihood value from the second set of likelihood values in a probability vector, wherein the first set of likelihood values include probabilities P_1 through P_X, where X is the number of possible values for the first codeword; wherein the second set of likelihood values include probabilities Q_1 through Q_ X; and wherein the probability vector is generated by multiplying the probabilities of the first set of likelihood values and the second set of likelihood values, and then normalizing the products, the probability vector, PV, being defined based on the following equation: PV = P _ 1 ∗ Q _ 1, P _ 2 ∗ Q _ 2... P _ X ∗ Q _ X P _ 1 ∗ Q _ 1 + P _ 2 ∗ Q _ 2... + P _ X ∗ Q _ X, thereby identifying the most likely decoded value for the first codeword. obtaining a first block of data, either from a storage medium or by receiving, via a network interface, a first block of data transmitted by a computing device, wherein the first block of data comprises a first codeword generated based on an error correction code comprising a polar code; obtaining a first set of likelihood values from a neural network, wherein: the neural network determines the first set of likelihood values based on analysis of previously decoded blocks of data; and each likelihood value of the first set of likelihood values indicates a probability that the first codeword corresponds to a respective decoded value of a plurality of decoded values; obtaining a second set of likelihood values from a polar decoder based on the first block of data, wherein decoding the first codeword comprises performing list decoding to determine the second set of likelihood values, and wherein each likelihood value of the second set of likelihood values indicates a probability that the first codeword corresponds to a respective decoded value of the plurality of decoded values; and the neural network determines the first set of likelihood values based on analysis of previously decoded blocks of data; and each likelihood value of the first set of likelihood values indicates a probability that the first codeword corresponds to a respective decoded value of a plurality of decoded values; obtaining a second set of likelihood values from a polar decoder based on the first block of data, wherein decoding the first codeword comprises performing list decoding to determine the second set of likelihood values, and wherein each likelihood value of the second set of likelihood values indicates a probability that the first codeword corresponds to a respective decoded value of the plurality of decoded values; and decoding the first codeword to obtain a decoded value based on the first set of likelihood values and the second set of likelihood values by combining each likelihood value from the first set of likelihood values with a respective likelihood value from the second set of likelihood values in a probability vector, wherein the first set of likelihood values include probabilities P_1 through P_X, where X is the number of possible values for the first codeword; wherein the second set of likelihood values include probabilities Q_1 through Q_ X; and wherein the probability vector is generated by multiplying the probabilities of the first set of likelihood values and the second set of likelihood values, and then normalizing the products, the probability vector, PV, being defined based on the following equation: PV = P _ 1 ∗ Q _ 1, P _ 2 ∗ Q _ 2... P _ X ∗ Q _ X P _ 1 ∗ Q _ 1 + P _ 2 ∗ Q _ 2... + P _ X ∗ Q _ X, thereby identifying the most likely decoded value for the first codeword.